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

rav*_*ven 8 c++ ofstream

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

for(int i = 0; i < 12; i++)
fout << DChuffTable[i];
Run Code Online (Sandbox Code Playgroud)

这是数组的定义:

unsigned char DChuffTable[12] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B};
Run Code Online (Sandbox Code Playgroud)

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

Lig*_*ica 21

您的流在文本模式下打开,因为0x0A是换行(LF)字符,您的流将转换为0x0D 0x0ACR/LF.

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

std::ofstream fout("filename", std::ios_base::out | std::ios_base::binary);
Run Code Online (Sandbox Code Playgroud)

然后不应执行行结束转换.

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