用 C++ 将浮点数写入二进制文件 |相当于 Java 的 DataOutputStream.writeFloat()

Writing floats to a binary file in C++ | Equivalent of Java's DataOutputStream.writeFloat()

我正在将一些代码从 Java 移植到 C++,并且需要将浮点数写入二进制文件。在 Java 中,我使用 DataOutputStream.writeFloat()。我如何在 C++ 中执行此操作?

我试过这个方法,但没用:

std::ofstream out;
out.open(somePath, std::ios::out | std::ios::binary);

float f = 0.5;
out.write(reinterpret_cast<const char*>(&f), sizeof(float));

您的代码似乎运行良好!

main.cpp:

#include <fstream>

int main() {
   std::ofstream out;
   out.open( "bin.dat", std::ios::out | std::ios::binary);
   float f = 0.5;
   out.write( reinterpret_cast<const char*>( &f ), sizeof( float ));
   out.close();
   return 0;
}

编译、链接:

$ g++ -o m main.cpp

正在执行:

m

清单:

$ ls
bin.dat  m.exe  main.cpp

使用 Notepad++ 编辑 bin.dat:

Java 的默认行为是在 big endian 中写入文件(以及任何其他流式传输到 IO 的数据)。 C++ 以本机格式写入文件。在标准的 x86 派生 PC 上本机是小端,所以对于 0.5 你得到:

0x00 00 00 3f 在 C++ 中

0x3f 00 00 00 在 Java.

为了写入两个都可以读取的文件,您必须确定输出文件将使用哪个字节序,并且其中一个程序必须反转其字节序。