2013-08-29 23 views
1

我正在寫一個程序來生成位圖圖像。當我測試它時,我發現C++寫入了額外的字節(看似隨機的位置),從而抵消了我的所有字節(隨後搞亂了圖像)。我從數組寫入文件。我認爲數組的完整內容是完美的,但是額外的字節總是被寫入。這通過用ios :: binary標誌打開文件來解決。Ofstream ::寫儘管明確的源數組額外的字節

如果我從完全相同的數組輸出,爲什麼打開帶有和不帶有ios :: binary標誌的文件很重要。

使用代碼:: Blocks的12.11,默認的編譯器的C++ 0x

+0

你看過數組內容的*字節*嗎?例如,您的文本輸出流很可能將CR轉換爲CR/LF。我的問題是「爲什麼我會嘗試將二進制數據寫入文本輸出流,並期望它能*工作*? – WhozCraig

+0

Inspired給出的答案與我的場景完美匹配......並且我查看了單個字節(使自己的緩衝區),因爲他們去了潮流 – ithenoob

+0

非常好,它不是一個不尋常的打嗝,很高興你找到答案。 – WhozCraig

回答

4

因爲你是最有可能使用的是Windows,並有關於如何一些特殊字符(如換行)在中表示一些約定文本文件:例如在Windows中的\n被轉換爲\r\n,並且讀取0x1E(「EOF」)會產生文件結束標誌。如果以二進制(非文本)模式打開文件,則不會發生這些轉換。

即使你不使用Windows:對於二進制數據總是使用二進制模式,這是可移植的方式。