2

我可以复制和粘贴一个简单的功能来进行这种转换吗?Ruby 等价物是

bytes.unpack("n*")
4

2 回答 2

3

使用cerealorbinary包,解码为 16 位 unsigned int ( Word16) 然后将该值转换为 full Integer

import Data.Serialize
...
someFunction = ...
    let intVal = runGet (fromIntegral `fmap` getWord16be) bytes

编辑:

与 haskell 中的任何 monad 一样,您可以使用更高级别的函数,例如replciateM上面的代码来获取 int 值列表(下面是未经测试的代码):

import Data.Serialize
...
someFunction = ...
    let intVals = runGet (do n <- get
                             replicateM n (fromIntegral `fmap` getWord16be)) bs
于 2013-07-10T19:53:58.090 回答
2

编辑:

根据 Thomas M. DuBuisson 的建议,这是我的解决方案:

eitherIntVal :: B.ByteString -> Either String [Integer]
eitherIntVal = runGet (do 
    xs <- replicateM 5 (Just `fmap` getWord16be <|> return Nothing)
    return $ map fromIntegral $ catMaybes xs) 
于 2013-07-11T12:09:49.923 回答