【发布时间】:2019-06-04 18:16:10
【问题描述】:
我需要以可移植的方式将double 值存储在文件中。我知道我可以将它们写成人类可读的形式,比如1.23456789,但我希望通过将它们写成二进制来节省空间。
我知道如何将二进制文件写入文件,但是有没有一种方法可以使生成的文件与编译和执行代码的机器无关?我希望能够以这种方式跨机器读取/写入此类文件。
【问题讨论】:
-
简单的常规方法是使用跨平台序列化库,如 msgpack 或 Google 协议缓冲区
-
有意思,我去看看。
-
如果您需要序列化的 only 东西是双倍的,那就太矫枉过正了,但这是极不可能的。
-
如果您可以假设所涉及的系统对
double使用相同的二进制格式(或者至少使用某种二进制格式并且每个系统都能够表示所有必需的值),然后使用%a格式的输入和输出。这使用十六进制表示法,可以轻松准确地表示值(即,不需要任何舍入)。 -
如果您需要进一步压缩,并且可以再次假设二进制基数,则在二进制中写入符号位、有效位和指数位。您可以使用
frexp获得有效位和指数位。您需要决定如何编码 NaN 和无穷大。