如何将ByteString转换为Int并处理字节序?

5 haskell endianness bytestring

我需要在Haskell中读取二进制格式.格式非常简单:四个八位字节表示数据的长度,后跟数据.四个八位字节表示网络字节顺序中的整数.

如何将ByteString四个字节转换为整数?我想要一个直接演员(在C中,那将是*(int*)&data),而不是字典转换.另外,我将如何处理字节序?序列化整数是网络字节顺序,但机器可能使用不同的字节顺序.

我试过谷歌搜索,但只有yold结果有关词典转换.

Sar*_*rah 12

二进制包包含从ByteStrings获取各种大小和字节序的整数类型的工具.


Pub*_*bby 5

我假设您可以使用折叠,然后使用foldlfoldr来确定您想要哪个字节序(我忘记了哪个是哪个)。

foldl :: (a -> Word8 -> a) -> a -> ByteString -> a
Run Code Online (Sandbox Code Playgroud)

我认为这适用于二元运算符:

foo :: Int -> Word8 -> Int
foo prev v = (prev * 256) + v
Run Code Online (Sandbox Code Playgroud)