我有一个包含由Data.Binary序列化的[Double]
的文件,我想用C读取。也就是说,我想编写一个C程序,将该数据作为double[]
读入内存。我打算编写一个Haskell程序来反序列化数据文件,然后将二进制数据写入一个新的,更简单的文件中,我可以直接将其读入C,但是我不确定如何只写出原始二进制数据(例如,双字节为8个字节)。
最佳答案
使用Data.Binary
序列化Double
或Float
值对于可移植性不是很好。 Binary
实例以decodeFloat
获得的形式对值进行序列化,即作为尾数和指数。尾数被序列化为Integer
。解析很不方便。正如ehird所建议的那样,更好的做法是使用一种变体,将它们序列化为cereal-ieee754提供的IEEE-754表示的位模式-正如ehird提醒我的那样,该模式已经合并(减去浮点数之间的一些转换)。和单词类型)转换为cereal-或已经提到的data-binary-ieee754。另一种选择是通过show
将它们序列化为字符串。这样做的好处是可以避免任何字节序问题。