我有一个包含由Data.Binary序列化的[Double]的文件,我想用C读取。也就是说,我想编写一个C程序,将该数据作为double[]读入内存。我打算编写一个Haskell程序来反序列化数据文件,然后将二进制数据写入一个新的,更简单的文件中,我可以直接将其读入C,但是我不确定如何只写出原始二进制数据(例如,双字节为8个字节)。

最佳答案

使用Data.Binary序列化DoubleFloat值对于可移植性不是很好。 Binary实例以decodeFloat获得的形式对值进行序列化,即作为尾数和指数。尾数被序列化为Integer。解析很不方便。正如ehird所建议的那样,更好的做法是使用一种变体,将它们序列化为cereal-ieee754提供的IEEE-754表示的位模式-正如ehird提醒我的那样,该模式已经合并(减去浮点数之间的一些转换)。和单词类型)转换为cereal-或已经提到的data-binary-ieee754。另一种选择是通过show将它们序列化为字符串。这样做的好处是可以避免任何字节序问题。

10-04 22:14
查看更多