haskell - 在 Haskell 中处理签名的二进制数据而不使用 unsafeCoerce

标签 haskell binary

我正在使用 Data.Binary 中的 Get monad 从包含有符号 16 位整数的二进制文件中读取结构。我当前的代码如下所示:

data DetectorStats = DetectorStats Int16 Word8 Word8
                     Word8 Int16 Version Int16 
                     deriving Show

getDetectorStats :: Get DetectorStats
getDetectorStats = do
  productNumber <- getWord16be
  bitPerCoordinate <- getWord8
  energyCapability <- getWord8
  timingCapability <- getWord8
  clockFrequency <- getWord16be
  serialNumber <- getWord16be
  return (DetectorStats (unsafeCoerce productNumber )
                        bitPerCoordinate
                        energyCapability 
                        timingCapability
                        (unsafeCoerce clockFrequency)
                        firmwareVersion
                        (unsafeCoerce serialNumber))

我对使用 unsafeCoerce 不满意,但似乎没有办法直接读取 Int16 ,也没有办法转换 < strong>Word16 转换为 Int16。有没有更好的方法来处理这个问题?

最佳答案

fromIntegral 会将 Word16 转换为 Int16。但是,您必须检查它是否获得了您预期的签名结果。

关于haskell - 在 Haskell 中处理签名的二进制数据而不使用 unsafeCoerce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5160644/

相关文章:

linux - 从已编译的二进制文件中获取宏值(带调试)

c++ - 在 C++ 中将字符串拆分为 4 个字符

c - 过程链接表的用途是什么?

haskell - OO 接口(interface)转换为 Haskell

Haskell 组合 (.) 与 F# 的管道前向运算符 (|>)

haskell - Haskell 中的 OO 抽象类型模式

postgresql - 如何从字段中获取列名

binary - Brainfuck 与 1 位存储单元?

macos - 为什么 __LINKEDIT 有时会关闭 0x1000?

haskell - 具有Gloss lib的Haskell代码无法编译