如何在 Haskell 中将整数转换为字节字符串
我们希望以特定的二进制格式序列化数据。我们在内部使用Data.ByteString
。
所以,问题是:如何将我们使用的不同数据类型转换为ByteString
。对于String
我们没有问题,我们可以使用encodeLazyByteString UTF8“string”
。但我们还想将Integer
转换为ByteString
(大端)。
有谁知道如何做到这一点和/或有任何使用 Haskell 和二进制格式的好技巧吗?
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Data.Binary 的完美工作:
生成惰性字节串,当然可以将其转换为严格字节串。谷物包提供了大致相同的接口,但仅产生严格的字节串(因此没有无限的编码流)。
A perfect job for Data.Binary:
to yield lazy bytestrings, which can of course be converted to strict ones. The cereal package provides much the same interface, but yields strict bytestrings only (so no infinite streaming of encodings).
对于像我一样正在寻找将 Int 或 Integer 转换为 ByteString 的函数的人,可以使用: Data.ByteString.Char8.pack 。展示
如果它在你的 ghc 中编译,你可以使用 TextShow 中的 show 就更好了。我知道这并不完全是OP所要求的,但寻找前文的人可能会因其标题而对此页面感到困惑。
For those, like me, looking for a function to convert an Int or Integer to a ByteString you can use: Data.ByteString.Char8.pack . show
Even better if it compiles in your ghc you can use show from TextShow. I understand that this is not quite the OP was asking but people looking for the preceding may end up puzzled at this page due to its title.
查看二进制包,或其任何非惰性变体:谷物 或 二进制严格 。
在这三种情况下,由于您具有特定的二进制格式,因此我会忽略每种情况下定义的类型类
Binary
,而是专注于Put
和Get
他们定义的单子。Have a look at the binary package, or any of its non-lazy variants: cereal or binary-strict .
In all three cases, since you have a specific binary format, I'd ignore the type class
Binary
defined in each, and instead focus on thePut
andGet
monads they define.