作为一个haskell新手,我遇到了这个问题:我有一个字节串中的二进制数据,我想将它转换为Word128的列表(假设二进制数据是16字节对齐的)。实际上,我什至无法将 16 字节的字节串转换为 Word128。
有人可以帮忙吗?谢谢!
作为一个haskell新手,我遇到了这个问题:我有一个字节串中的二进制数据,我想将它转换为Word128的列表(假设二进制数据是16字节对齐的)。实际上,我什至无法将 16 字节的字节串转换为 Word128。
有人可以帮忙吗?谢谢!
通常你会为你选择的二进制解析库编写一个实例。例如,对于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 -}
然后将其粘合到实例二进制文件中。
因此,选择您的二进制解析库(二进制或谷物),并为您的类型编写一个实例。