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)); 我个人更喜欢用文本模式写作.这意味着拥有更清晰的代码和便携式输出文件.如果必须,您可以压缩文件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |