从bytestring中读取int

时间:2017-09-30 14:43:49

标签: haskell

如何从bytestring中获取Int:

let val_hex = Data.ByteString.Char8.pack "\xcd"
let val_dig = Data.ByteString.Char8.pack "\205"
val_hex == val_dig -- True
let maybeInt = Data.ByteString.Char8.readInt val_hex -- gets Nothing

所以,我想要恢复该值,打包到bytestring。即maybeInt应该是Maybe(205,“”)

1 个答案:

答案 0 :(得分:2)

readInt函数用于从(通常为多字节)字节字符串中读取编码为ASCII字符串的整数,如下所示:

> let b = Data.ByteString.Char8.pack "12345"
> b
"12345"
> Data.ByteString.Char8.readInt b
Just (12345,"")
> 

看起来您想从单字节字节字符串中提取整数,其中整数只是字节的值。最直接的方法可能是使用Data.ByteString.head

> let b = Data.ByteString.Char8.pack "\xcd"
> Data.ByteString.head b
205
> :t Data.ByteString.head b 
Data.ByteString.head b :: GHC.Word.Word8
> 

请注意,这是来自head的{​​{1}},其返回Data.ByteString,而非Word8返回Data.ByteString.Char8.head。作为一般规则,Char中的函数将字节字符串视为ASCII编码,而Data.ByteString.Char8中的函数只将其视为一组字节,其值为0-255。大多数将字节串操作为ASCII的程序都需要使用两个模块中的函数。

由于Data.ByteString返回Data.ByteString.head,您可能需要使用Word8将其转换为您想要的整数类型:

fromIntegral