4

일련의 숫자를 적절한 비트 수로 잘라내어 청크의 지연 시퀀스 (최하위 비트가 먼저)를 반환하는 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" 
    ... 

파라미터 :

  • 에서 블록 크기의 입력 시퀀스 내의 각각의 숫자 최하위 비트의 개수
  • 아웃 블록 크기는 각 최하위 비트의 개수 반환되는 lazy 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 (read-bytes-from-file)))

+0

더 많은 코드를 보지 않고 무엇을하고 있는지 말할 수는 없지만 메타 데이터를 사용하여 패딩을 녹음 할 수 있습니까? –

+0

패딩 비트 수에 대한 정보를 읽으려면 무엇이 필요하며 읽을 수있는 편리한 방법은 무엇입니까? 의견에 대해 –

+0

주셔서 감사합니다. 수정합니다. –

답변

1

당신이하고 싶은 일은 아직 명확하지 않지만, block-seq는 마지막 청크의 패딩 된 비트 수를 반환합니다. 물론, 제대로 게으르 길 원한다면 앞쪽으로는 할 수 없으므로 마지막 덩어리와 함께 또는 그 이후에 번호를 반환해야합니다. 그냥 메타 데이터를 사용하여

(1 2 3 :pad 12) 

같은 목록을 반환 할 수 메타 데이터를 사용하지 않고

, 당신은 마지막 단점 (Clojure의 정수에 대한 메타 데이터를 추가 할 수 없습니다) 해당 패딩 정보를 추가 할 수 있습니다, 그래서 마지막 죄수 해당하는 것 일 연쇄 들어

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

에, 이진 블록은 해제 패드로 할 수 다음 마지막 덩어리를 패드 다시 할 수 있도록, 두 경우 모두, 그 패딩 정보를 알고 있어야 할 것이다.

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