我正在尝试在Haskell中解析二进制文件格式(Apple的二进制属性列表格式),并且该格式所需的一件事是将字节序列视为(a)无符号的1-,2-或4-字节整数; (b)签署8字节整数; (c)32位float
; (d)64位double
.将字节序列转换为无符号整数很容易,甚至处理有符号整数也不会很糟糕.但是对于有符号的整数,特别是Float
s和Double
s,我真的不想自己实现逻辑.我已经能够找到的功能int2Float# :: Int# -> Float#
,并int2Double# :: Int# -> Double#
在GHC.Prim,但这些似乎并不理想(我不特别想与拆箱类型来工作).我希望有一些方法可以从a [Word8]
或Word32
s/Word64
s中进行投射.是否有类型的任何功能Word32 -> Float
,Word64 -> Double
,Word64 -> Int64
,或类似的?
如果您不了解,请fromIntegral
完美地转换积分.此外,二进制包和相关的data-binary-ieee754包非常适用于您的问题.