使用<<运算符将二进制写入std::fstream

7
出于某种原因,这个排序代码的效果不如我预期的那样:
std::fstream theFile;
theFile.open(<someFilename>, std::ios::beg |std::ios::out|std::ios::binary|std::ios::trunc);
theFile << 1;          //1 is being written as a string
int var= 25;

theFile << 25;        //same thing, 25 is written as a string

可能出了什么问题?我正在使用随Visual Studio 2010一起提供的Microsoft C++编译器。

2个回答

11

<< 运算符的作用是将格式化数据写入流中。如果您想要写入二进制数据,应该使用 ostream::write()ostream::put()


0

你需要先将值强制转换为char,否则iostream库会将这些值视为int并将它们格式化为可读字符串。

theFile << (char)1 << (char)25;

@sehe,是的,它会。文件不会关心有符号还是无符号。它将以无符号形式写入文件。我鼓励您尝试一下,并亲自验证。我刚刚尝试过,它可以正常工作。你可以写从0到255的任何内容。 - Drew Chapin
哦...,我的错。我一定被巧合蒙住了眼睛,以至于我的编译器也允许超过255的整数。连负整数都可以,天哪。 - sehe
1
谢谢,答案非常准确。显然,std::ios::binary开关只用于优化文件查找操作;ostream <<将始终写入格式化数据,而ostream::write / ostream::put则无论模式如何都会写入二进制数据。如果能够使用<<运算符写入多个字符就太棒了;我猜我得继承自std::fstream并重写该运算符。 - seggaeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接