将整数集写入 std::ofstream 并能够读回它们

bnd*_*ndu 3 c++ integer ofstream

std::ofstream我需要以二进制模式写入一堆无符号整数:

std::ofstream f;
f.open("some path", std::ios::out | std::ios::binary);
// some loop
{
  unsigned int k = get_k(); // may product numbers from 0 to 65535
  f << k;
}
f.close();
Run Code Online (Sandbox Code Playgroud)

它们被“按原样”写入输出文件,不带任何分隔符。因此,当我尝试使用它们读回它们(期望得到我写的内容)时,std::ifstream我得到了非常奇怪的值。我做错了什么?

或者我应该' '在任何添加的数字之后将(空格)放入流中以将它们分开?

谢谢。

wil*_*ell 5

您正在使用operator<<()它将格式化文本输出到流中。因此,您将纯文本写入二进制文件,这有点违背了以二进制模式写入的目的。尝试在文本编辑器中打开输出文件并亲自查看。

您有两种选择:要么以文本模式编写并用空格分隔值(因为当您使用格式化输出时以二进制模式编写会产生误导),要么使用流的write()方法进行强制转换。

f.write(reinterpret_cast<char*>(&k), sizeof(int));
// ...
f.read(reinterpret_cast<char*>(&k), sizeof(int));
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢用文本模式写作。这意味着拥有更清晰的代码和可移植的输出文件。如果需要,您可以压缩该文件。