用c ++将二进制数据写入fstream

you*_*ate 12 c++ io binary file

我有一些结构要写入二进制文件。例如,它们由来自 cstdint 的整数组成uint64_t。有没有办法将它们写入二进制文件,而不需要我手动将它们拆分为数组char并使用fstream.write()函数?

我试过的

我天真的想法是 C++ 会发现我有一个二进制模式的文件,<<并将整数写入该二进制文件。所以我试过这个:

#include <iostream>
#include <fstream>
#include <cstdint>

using namespace std;

int main() {
  fstream file;
  uint64_t myuint = 0xFFFF;
  file.open("test.bin", ios::app | ios::binary);
  file << myuint;
  file.close();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,这将字符串“65535”写入文件。

我可以以某种方式告诉 fstream 切换到二进制模式,例如如何使用 更改显示格式<< std::hex

如果上面的所有内容都失败了,我需要一个将任意 cstdint 类型转换为 char 数组的函数。

我并不真正关心字节顺序,因为我会使用相同的程序来读取它们(在下一步中),所以它会抵消。

YSC*_*YSC 11

是的,你可以,这std::fstream::write是为了:

#include <iostream>
#include <fstream>
#include <cstdint>

int main() {
  std::fstream file;
  uint64_t myuint = 0xFFFF;
  file.open("test.bin", std::ios::app | std::ios::binary);
  file.write(reinterpret_cast<char*>(&myuint), sizeof(myuint)); // ideally, you should memcpy it to a char buffer.
}
Run Code Online (Sandbox Code Playgroud)