如何在Clojure中解析二进制文件

10

如何在Clojure中以最干净的方式解析二进制数据?我需要能够清晰地读/写文件或套接字。

类似于:

  (read-data 数据源) 
  => {:索引 42,:块大小 4,数据大小:31415,:数据 (1 2 3 4 ...)}

并且相反放置数据。真的很好,可以通过定义相同结构来同时使用读取和写入函数。

2个回答

13

Gloss可以轻松地定义二进制格式,包括读取和写入。

(defcodec example-codec
  [:id       :uint32
   :msg-type (enum :byte {:a \A, :b \B})
   :status   (string :ascii :length 11)])

(def buffer (byte-array 16))

(.read (input-stream "filename.bin") buffer)
(decode example-codec buffer)

(encode example-codec {:id 42, :msg-type :a, :status "A-OKAY"})

bit-map函数允许位级格式,但定义的比特数必须是8的倍数,以便字节仍然对齐。

还有一个叫做byte-spec的工具。


4

我需要同时读取和写入这些格式,虽然这是一个好的开始。我还需要位级准确性。 - Arthur Ulfeldt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接