1

我正在编写一个程序来生成位图图像。当我测试它时,我发现 C++ 正在写入额外的字节(在看似随机的位置),从而抵消了我所有的字节(随后弄乱了图像)。我从数组写入文件。我计算出数组的完整内容,它们很完美,但是总是写入额外的字节。这是通过使用 ios::binary 标志打开文件来解决的。

如果我从完全相同的数组输出,为什么打开带有和不带有 ios::binary 标志的文件很重要。

使用 Code::Blocks 12.11,带有 C++0X 的默认编译器

4

1 回答 1

4

因为您很可能使用的是 Windows,并且对于某些特殊字符(例如换行符)在文本文件中的表示方式有一些约定:例如\n在 Windows 中被转换为\r\n,并且读取0x1E(“EOF”)引发文件结束旗帜。如果您以二进制(非文本)模式打开文件,则不会发生这些转换。

即使您不使用 Windows:始终对二进制数据使用二进制模式,它也是可移植的方式。

于 2013-08-29T20:15:06.703 回答