我正在编写一个程序来生成位图图像。当我测试它时,我发现C ++正在编写额外的字节(在看似随机的位置),从而抵消了我的所有字节(随后弄乱了图像)。我从数组写入文件。我讨论数组的完整内容,它们是完美的,但总是写入额外的字节。通过使用ios :: binary标志打开文件来解决此问题。
如果我从完全相同的数组输出,为什么在有和没有ios :: binary标志的情况下打开文件会很重要。
使用Code :: Blocks 12.11,使用C ++ 0X的默认编译器
答案 0 :(得分:4)
因为您最有可能使用Windows,并且有一些关于如何在文本文件中表示某些特殊字符(例如换行符)的约定:例如Windows中的\n
转换为\r\n
,读取0x1E
(“EOF”)会引发文件结束标志。如果以二进制(非文本)模式打开文件,则不会发生这些转换。
即使你不使用Windows:总是使用二进制模式来处理二进制数据,这是可移植的方式。