문제

나는 일련의 숫자를 취하는 clojure 함수를 가지고 그것을 적절한 수의 비트로 자르고 덩어리의 게으른 시퀀스를 반환합니다 (가장 낮은 순서 비트). 블록 크기를 채우기 위해 마지막 블록의 높은 차수 비트를 채우고 게으르고 기능적으로 유지하면서 패딩의 양을 기록하기 위해 "최상의 방법 (TM)"에 대한 조언이 필요합니까?

지혜의 말씀은 대단히 감사했습니다.

(defn block-seq
  ([block-size bytes]
    "reads a byte-seq into a sequence of block-size bits."
    (block-seq 8 block-size bytes))
  ([in-block-size out-block-size bytes]
    "converts a seq from in-block-size to out-block-size"
  ...

매개 변수 :

  • 블록 크기는 입력 순서에서 각 숫자의 유의미한 비트 수입니다.
  • Out-Block-Size는 거부되는 게으른 SEQ의 각 숫자에서 유의미한 비트 수입니다.
  • 바이트는 비트를 추출하는 게으른 숫자입니다.

다음은 3 바이트 시퀀스를 취하여 2 개의 20 비트 숫자의 시퀀스로 나누고 이진 문자열로 인쇄하는 예입니다.

user> (map #(java.lang.Integer/toBinaryString %) (block-seq 20 [0xAA 0xAA 0xAA]))
("10101010101010101010" "1010")
user> 

20 비트 숫자 순서의 두 번째 숫자는 4 개의 유의미한 비트에 불과하며 효과적인 16 개의 0이 추가되었습니다. 그런 다음이 시퀀스를 시퀀스로 무언가를하고 네트워크를 통해 보내고 자하는 다른 함수 로이 시퀀스를 전달하면; 수신 끝에있는 코드는 마지막 16 비트를 인쇄/저장하지 않아야합니다.

추신 : 이들은 묶을 수 있습니다. (Block-Seq 20 15 (Block-Seq 8 20 (파일-파일로 읽기)))))))))

도움이 되었습니까?

해결책

아직 무엇을하고 싶은지는 아직 명확하지 않지만 블록 세크가 마지막 청크에서 패딩 비트 수를 반환하는 가장 좋은 방법을 알고 싶어하는 것 같습니다. 물론 제대로 게으르고 싶다면 전면은 불가능하므로 마지막 청크와 함께 또는 후에 번호를 반환해야합니다.

메타 데이터를 사용하지 않으면 다음과 같은 목록을 반환 할 수 있습니다.

(1 2 3 :pad 12)

메타 데이터를 사용하면 패딩 정보를 마지막 단점에 추가 할 수 있습니다 (Clojure는 정수에 메타 데이터를 추가 할 수 없습니다). 마지막 단점은

(with-meta '(3) {:pad 12})

체인이 작동하기 위해서는 이진 블록은 두 경우에 해당 패딩 정보를 알고 있어야합니다.

그러나 패딩 정보를 와이어를 통해 전송하는 방법은 또 다른 질문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top