如何在Haskell中将整数转换为ByteString

时间:2010-02-17 17:56:06

标签: haskell bytestring

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

所以,问题是:如何将我们使用的不同数据类型转换为ByteString。对于String我们没有问题,我们可以使用encodeLazyByteString UTF8 "string"。但我们也希望将Integer转换为ByteString s(big-endian)。

有没有人知道怎么做和/或有任何使用Haskell和二进制格式的好技巧?

谢谢!

3 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:3)

查看binary package或其任何非惰性变种:cerealbinary-strict

在所有三种情况下,由于您有特定的二进制格式,我会忽略每个格式中定义的类型类Binary,而是专注于PutGet monad定义

答案 2 :(得分:1)

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