19

我们想以特定的二进制格式序列化数据。我们Data.ByteString在内部使用 s。

所以,问题是:如何将我们使用的不同数据类型转换为ByteString. 因为String我们没有问题,我们可以使用encodeLazyByteString UTF8 "string". 但我们也想将Integers 转换为ByteStrings(大端)。

有谁知道如何做到这一点和/或有任何使用 Haskell 和二进制格式的好技巧?

谢谢!

4

3 回答 3

18

Data.Binary 的完美工作:

Prelude> :m + Data.Binary
Prelude Data.Binary> encode (pi :: Double)
Chunk "\SOH\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\a\CAN-DT\251!\EM\255\255\255\255\255\255\255\205" Empty

Prelude Data.Binary> encode (42 :: Integer)
Chunk "\NUL\NUL\NUL\NUL*" Empty

产生惰性字节串,当然可以将其转换为严格字节串。谷物包提供了几乎相同的接口,但只产生严格的字节串(因此没有无限的编码流)。

于 2010-02-17T20:35:09.360 回答
4

对于像我这样正在寻找将 Int 或 Integer 转换为 ByteString 的函数的人,您可以使用: Data.ByteString.Char8.pack 。如果它在你的 ghc 中编译更好,你可以使用 TextShow 中的 show。我知道这并不是 OP 所要求的,但是寻找前面的人可能会因为它的标题而在这个页面上感到困惑。

于 2019-02-16T00:25:48.933 回答
3

查看binary package或其任何非惰性变体:谷物binary-strict

在所有这三种情况下,由于您具有特定的二进制格式,因此我将忽略Binary每种情况中定义的类型类,而将重点放在它们定义的Putand Getmonad 上。

于 2010-02-17T19:17:30.517 回答