在Haskell中将字节转换为Int64s/Floats/Doubles

Ant*_*sky 4 haskell bits

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

Tho*_*son 5

如果您不了解,请fromIntegral完美地转换积分.此外,二进制包和相关的data-binary-ieee754包非常适用于您的问题.

  • 并且它不需要初学者知道/直接使用`unsafeCoerce`. (3认同)