Parsing 从bytestring读取字128
作为一名haskell新手,我遇到了一个问题:我在bytestring中有一个二进制数据,我想将它转换为Word128的列表(假设二进制数据是16字节对齐的)。 实际上,我甚至很难将16字节的bytestring转换成128字 有人能帮忙吗?Parsing 从bytestring读取字128,parsing,haskell,binary-data,Parsing,Haskell,Binary Data,作为一名haskell新手,我遇到了一个问题:我在bytestring中有一个二进制数据,我想将它转换为Word128的列表(假设二进制数据是16字节对齐的)。 实际上,我甚至很难将16字节的bytestring转换成128字 有人能帮忙吗? 谢谢 通常,您将为所选的二进制解析库编写一个实例。例如,你可以写下这样的内容: -- | Read a Word64 in big endian format getWord64be :: Get Word64 getWord64be = do s
谢谢 通常,您将为所选的二进制解析库编写一个实例。例如,你可以写下这样的内容:
-- | 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 -}
——|阅读大端格式的单词64
getWord64be::GetWord64
getWord64be=do
s我们在哪里为一个unsafeGetbe::(积分a,位a)=>Int->a
提交一个功能请求,这将把它变成getWord64be=unsafeGetbe 8
?=)展开的字节级循环对我来说似乎很好。你想用TH生成它吗?我想更像是一个foldr(\byte val->shiftl val 8.|.from integral byte)
或类似的东西。@Don在Data.Binary.Get之外公开了吗?或者你真的建议他修改Data.Binary.Get的src吗?@Jonke,@Don:二进制(Data.Binary.Get)和谷物(Data.Serialize.Get)包的src应该是getBytes
。