将fwrite转换为C++类型代码写入二进制文件

Convert fwrite to C++ type code to write binary files

我正在尝试将 C 样式文件 IO 转换为 C++ 样式文件 IO。我需要将数字 42 写成一个 4 字节的有符号整数。

这是我尝试过的有效 C 类型 IO 的示例

#include <stdio.h>
#include <string>
#include <fstream>

using namespace std;

int main()
{
  FILE *myFile;
  myFile = fopen ("input_file.dat", "wb");

  int magicn = 42;
  fwrite (&magicn, sizeof(magicn), 1, myFile);

  fclose (myFile);
  return 0;
}

我正在尝试根据我提出的另一个问题 () 的建议将上述代码转换为 C++ 类型 IO。

这是我的尝试:

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

int main()
{
  ofstream myFile ("input_file.dat", ios::binary);
  int magicn = 42;
  myFile << setw(sizeof(magicn)) << magicn;
  myFile.close();
  return 0;
}

但是,当我使用 'xxd -b input_file.dat' 命令时,我期望的输出是不一样的。

我期望的输出是(使用 C 类型 IO 代码生成)

0000000: 00101010 00000000 00000000 00000000 *...

但我看到了(由我尝试使用 C++ 类型的 IO 代码生成)

0000000: 00100000 00100000 00110100 00110010 42

正在寻找解决方案。感谢您的帮助!

使用ostream::write.

myFile.write(reinterpret_cast<char*>(&magicn), sizeof(magicn));

您当前的方法更像是 fprintf(myFile, "%d", magicn)。也就是说,它对流执行格式化插入,因此您最终得到第 42 个 ASCII 字符的 ASCII 码。

fwrite 的类似物是 ostream::write。只需查看 ostream 的可用成员即可了解您可以使用它做什么。