我试图将双精度写入二进制文件,但无法弄清楚如何以便携方式将其转换为char []。我想将它写在IEEE double precision format大端,并将其转换回当前平台的格式。
感谢您的帮助。
答案 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)编写大量代码以隐藏编译器的非标准double
到IEEE
,考虑到:不同的精度,范围,wobbling precision,+ / - 0 ,sub-normals等
推荐选项1
答案 1 :(得分:-3)
C和C ++有一个fread和fwrite,只是将指定块大小的指定位置的字节复制到指定的文件流,反之亦然...你不必转换为char [ ]