0

作为一个haskell新手,我遇到了这个问题:我有一个字节串中的二进制数据,我想将它转换为Word128的列表(假设二进制数据是16字节对齐的)。实际上,我什至无法将 16 字节的字节串转换为 Word128。

有人可以帮忙吗?谢谢!

4

1 回答 1

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 -}

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

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

于 2012-06-25T19:43:11.077 回答