加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:26:48 所属栏目:百科 来源:网络整理
导读:我需要在二进制模式下将一堆无符号整数写入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(); 它们被“按原样”
我需要在二进制模式下将一堆无符号整数写入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();

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

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

谢谢.

解决方法

您正在使用运算符<<()将格式化文本输出到流中.因此,您将明文写入二进制文件,这有点破坏了以二进制模式编写的目的.尝试在文本编辑器中打开输出文件,然后自己查看. 您有两种选择:以文本模式写入并使用空格分隔您的值(因为在使用格式化输出时以二进制模式写入会产生误导),或者使用流的write()方法进行强制转换.

f.write(reinterpret_cast<char*>(&k),sizeof(int));
// ...
f.read(reinterpret_cast<char*>(&k),sizeof(int));

我个人更喜欢用文本模式写作.这意味着拥有更清晰的代码和便携式输出文件.如果必须,您可以压缩文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读