从bytestring中读取Word128

时间:2012-06-25 19:33:49

标签: parsing haskell binary-data

作为一个haskell新手我坚持这个问题:我有一个字节串的二进制数据,我想将它转换为Word128的列表(假设二进制数据是16字节对齐)。 实际上我甚至有麻烦将16字节字节串转换为Word128。

有人可以帮忙吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

通常你会为你选择的二进制解析库编写一个实例。例如。对于Data.Binary,你会写一些类似的东西:

-- | Read a Word64 in big endian format
getWord64be :: Get Word64
getWord64be = do
    s <- readN 8 id
    return $! (fromIntegral (s `B.index` 0) `shiftl_w64` 56) .|.
              (fromIntegral (s `B.index` 1) `shiftl_w64` 48) .|.
              (fromIntegral (s `B.index` 2) `shiftl_w64` 40) .|.
              (fromIntegral (s `B.index` 3) `shiftl_w64` 32) .|.
              (fromIntegral (s `B.index` 4) `shiftl_w64` 24) .|.
              (fromIntegral (s `B.index` 5) `shiftl_w64` 16) .|.
              (fromIntegral (s `B.index` 6) `shiftl_w64`  8) .|.
              (fromIntegral (s `B.index` 7) )
{- INLINE getWord64be -}

然后将其粘贴到实例二进制文件中。

因此,选择二进制解析库(二进制或谷类),并为您的类型编写一个实例。