我可以复制和粘贴一个简单的功能来进行此转换吗? Ruby等价物将是
bytes.unpack("n*")
答案 0 :(得分:3)
使用cereal
或binary
包解码为16位无符号整数(Word16
),然后将该值转换为完整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
答案 1 :(得分: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)