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

发布于 2024-07-16 18:53:00 字数 258 浏览 4 评论 0原文

在 clojure 中解析二进制数据最简洁的方法是什么? 我需要能够同样干净地读/写文件或套接字。

类似于:

  (read-data source-of-data) 
  => { :index 42 , :block-size 4 , data-size: 31415, :data (1 2 3 4 ...)}

以及相反的方式将数据放回。 如果能以某种方式定义一次结构并让读取和写入函数使用相同的定义,那就太好了。

What is the cleanest way to parse binary data in clojure?
I need to be able to read/write equally cleanly to a file or a socket.

something like:

  (read-data source-of-data) 
  => { :index 42 , :block-size 4 , data-size: 31415, :data (1 2 3 4 ...)}

and the reverse for putting data back.
It would be really great to somehow define the structure once and have the read and write functions use the same definition.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

玩心态 2024-07-23 18:53:00

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"})

位图函数允许位级格式,但定义的位数必须能被 8 整除,以便字节仍然对齐。

还有 byte-spec

Gloss makes it easy to define binary formats at the byte level for both reading and writing.

(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"})

The bit-map function allows bit level formats, but the number of bits defined must be divisible by 8 so the bytes still line up.

There's also byte-spec.

薯片软お妹 2024-07-23 18:53:00

既然 Clojure 可以使用原生 Java 函数,为什么不使用那些呢? 沿着这些路线快速谷歌搜索给出: http:// /gnuvince.wordpress.com/2009/01/29/reading-binary-data-in-clojure/

Since Clojure can use native Java functions, why not use those? A quick Googling along those lines gives: http://gnuvince.wordpress.com/2009/01/29/reading-binary-data-in-clojure/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文