为什么ofstream在0x0A之前插入一个0x​​0D字节?

时间:2011-03-02 21:08:09

标签: c++ ofstream

我正在使用ofstream fout("filename");在C ++中输出一个无符号字符数组 但它会在两者之间产生虚假的角色。这是导致问题的代码的一部分:

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};

在输出文件中,我在0x0D0x09之间得到了一个虚假的0x0A。我在调试模式中检查了数组,然后才开始打印并且没有更改。请告诉我你对这个问题的看法。

1 个答案:

答案 0 :(得分:21)

您的信息流正在以文字模式打开,由于0x0A是换行(LF)字符,您的信息流正在转换为0x0D 0x0A,即CR / LF。

以二进制模式打开您的信息流:

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

然后不应该执行行结束转换。

无论如何,这通常被认为是一个好主意,因为流可以变得奇怪了w.r.t.在文本模式下刷新。