需要在Haskell中将16位无符号大端字节解码为整数



有没有一个简单的函数可以复制粘贴来进行转换?Ruby的等价物是

bytes.unpack("n*")

使用cerealbinary包,解码为16位无符号int(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

编辑:

根据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) 

最新更新