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

时间:2015-08-04 20:44:08

标签: c binaryfiles ieee-754

我试图将双精度写入二进制文件,但无法弄清楚如何以便携方式将其转换为char []。我想将它写在IEEE double precision format大端,并将其转换回当前平台的格式。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

各种方法:

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,也可以使用已定义的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)编写大量代码以隐藏编译器的非标准doubleIEEE,考虑到:不同的精度,范围,wobbling precision,+ / - 0 ,sub-normals

推荐选项1

答案 1 :(得分:-3)

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