如何将 double 转换为 char[] 并返回以读取/写入二进制文件?

How to convert a double to a char[] and back for reading / writing to binary file?

我正在尝试将 double 写入二进制文件,但无法弄清楚如何以可移植的方式将其转换为 char[]。我想以 IEEE double precision format、big endian 格式编写,然后将其转换回当前平台的格式。

感谢您的帮助。

C 和 C++ 具有 fread 和 fwrite,它们只是将指定块大小的指定位置的字节复制到指定的文件流,反之亦然...您不必转换为 char[ ]

各种方法:

1) 使用字符串。如果 FLT_RADIX 为 10,则使用 fprintf(outf, " %.*e", DBL_DECIMAL_DIG-1, x),否则使用 fprintf(outf, " %a", x)Ref)。使用 fscanf(inf, "%lf", &x) 回读。 ("%la"效果相同)

2) 使用联合并假定 double 格式为 IEEE double precision binary format, maybe also use defined endian 和 *nix: htonl()

union d2a {
  double d;
  unsigned char uc[sizeof double];
} u;

u.d = x;
ToNetworkEndian(u.uc);
fwrite(u.uc, 1, sizeof u.uc, outf);

fread(u.uc, 1, sizeof u.uc, inf);
FromNetworkEndian(u.uc);
x = u.d;

3) 编写大量代码将编译器的非标准 double 转换为 IEEE 考虑到:不同的精度、范围、wobbling precision, +/- 0, sub-normals

推荐选项1