C++ 将双变量写入c+中的二进制文件+;

C++ 将双变量写入c+中的二进制文件+;,c++,binary,C++,Binary,我试图将双变量写入二进制文件。我正在使用以下代码: double x = 1.; ofstream mfout; mfout.open("junk.bin", ios::out | ios::binary ); mfout.write((char*) &x, sizeof(double)); mfout.close(); 将输出二进制文件转换为ASCII后,它返回给我的是: 必须读取文件的第三方软件也会返回错误,表明存在问题。如果有人指导我,我会很感激的 将输出二进制文件转

我试图将双变量写入二进制文件。我正在使用以下代码:

double x = 1.;    
ofstream mfout;
mfout.open("junk.bin", ios::out | ios::binary  );
mfout.write((char*) &x, sizeof(double));
mfout.close();
将输出二进制文件转换为ASCII后,它返回给我的是:

必须读取文件的第三方软件也会返回错误,表明存在问题。如果有人指导我,我会很感激的

将输出二进制文件转换为ASCII后,它返回给我的是:

不。如果您将其解释为ASCII而不进行转换,那么它将返回给您。由于它不是ASCII码,将其解释为ASCII码将产生无意义的结果

必须读取文件的第三方软件也会返回错误,表明存在问题

听起来第三方软件不希望使用二进制文件,因为这是您编写的


该文件是二进制文件,而不是ASCII文件。只有期望二进制格式的单双精度(无论您的平台与编译器选项等一起使用何种二进制格式)才有意义。

尝试在十六进制编辑器或可以打印每个字节值(而不是ASCII字符编码)的编辑器中查看输出。输出为00 CC,根据十六进制转换器转换为一些无意义的字符。为什么要转换为
char*
?这可能会更改函数
mfout.write()
的功能。可能是endian-ness有问题。这并不能解决这个问题,但要养成将对象初始化为有意义的值的习惯,而不是默认地初始化它们并立即更改它们。即,改变流mfout的
;打开(“junk.bin”,ios::out | ios::binary)到流mfout的
(“junk.bin”,ios::out | ios::binary)。另外,调用
mfout.close()是不需要的。
mfout
的析构函数将关闭该文件。@mohammadalinajafisani第三方软件…——那么这另一个软件是用相同的编译器、编译器版本、编译器设置等编写的。?如果没有,祝你好运,让另一个软件理解你写的
double