我有 Clojure 函数,它接受一个数字序列,将其切成适当的位数并返回块的惰性序列(首先是最低位)。它填充最后一个块的高位以填充块大小,我需要有关“最佳方式(tm)”的建议来记录填充量,同时保持它的懒惰和功能?
智慧之言大受赞赏。
(定义块序列 ([块大小字节] “将字节序列读入块大小的位序列。” (块序列 8 个块大小字节)) ([in-block-size out-block-size 字节] “将序列从块内大小转换为块外大小” ...
参数:
- in-block-size 是输入序列中每个数字的有效位数
- out-block-size 是返回的惰性序列中每个数字的有效位数。
- bytes 是从中提取位的惰性数字序列
这是一个示例,它采用三个字节的序列并将其分解为两个 20 位数字的序列(然后将其打印为二进制字符串)。
user> (map #(java.lang.Integer/toBinaryString %) (block-seq 20 [0xAA 0xAA 0xAA])) (“10101010101010101010”“1010”) 用户>
20 位数字序列中的第二个数字只有四个有效位,并添加了有效的 16 个零。如果我随后将此序列传递给另一个想要对该序列执行某些操作并通过网络发送它的函数;接收端的代码需要知道不打印/存储/等最后 16 位。
PS:这些可以链接。(block-seq 20 15 (block-seq 8 20 (read-bytes-from-file)))