2011-03-02 48 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

相关问题