2011-03-02 47 views
8

我在C++中使用ofstream fout("filename"); 輸出一個無符號字符數組,但它在它們之間產生一個虛假字符。這是使該問題的代碼部分:爲什麼ofstream在0x0A之前插入一個0x​​0D字節?

for(int i = 0; i < 12; i++) 
fout << DChuffTable[i]; 

,這是數組的定義:

unsigned char DChuffTable[12] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B}; 

在輸出文件,我收到了假0x0D0x090x0A之間。在打印之前,我在調試模式下檢查了數組,並且沒有改變。請告訴我你對這個問題的看法。

回答

21

您的流在文本模式下打開,並且由於0x0A是換行符(LF)字符,該字符正在由您的流轉換爲0x0D0x0A即CR/LF。

以二進制模式打開流:

std::ofstream fout("filename", std::ios_base::out | std::ios_base::binary); 

然後行結束轉換不應該被執行。

無論如何,這通常被認爲是一個好主意,因爲流可能會變得怪異w.r.t.在文本模式下衝洗。

+0

非常感謝,我沒有想到這個問題。雖然我懷疑這個問題在linux中不會發生。對? – raven 2011-03-03 11:33:33

+0

@raven:同樣的情況適用,但是由於Unix系統使用「\ n」作爲結束行,確實你不會注意到任何症狀。儘管如此,它仍然是破碎的代碼。 :) – 2011-03-03 12:17:09

相關問題