为什么ofstream在0x0A之前插入0x0D字节? 我使用C++代码> OfStfFuT(“文件名”)输出一个无符号字符数组;代码> 但它在两者之间产生了一个虚假的角色。这是造成问题的代码部分: for(int i = 0; i < 12; i++) fout << DChuffTable[i];
在输出文件中,我得到一个介于为什么ofstream在0x0A之前插入0x0D字节? 我使用C++代码> OfStfFuT(“文件名”)输出一个无符号字符数组;代码> 但它在两者之间产生了一个虚假的角色。这是造成问题的代码部分: for(int i = 0; i < 12; i++) fout << DChuffTable[i];,c++,ofstream,C++,Ofstream,在输出文件中,我得到一个介于0x09和0x0A之间的伪0x0D。在打印阵列之前,我在调试模式下检查了阵列,并且没有更改。请告诉我您对这个问题的看法。您的流是以文本模式打开的,由于0x0A是换行符(LF),您的流正在将其转换为0x0D0x0A,即CR/LF 以二进制模式打开流: std::ofstream fout("filename", std::ios_base::out | std::ios_base::binary); 则不应执行行结束转换 这通常被认为是一个好主意,因为在文本模式下,流
0x09
和0x0A
之间的伪0x0D
。在打印阵列之前,我在调试模式下检查了阵列,并且没有更改。请告诉我您对这个问题的看法。您的流是以文本模式打开的,由于0x0A
是换行符(LF),您的流正在将其转换为0x0D
0x0A
,即CR/LF
以二进制模式打开流:
std::ofstream fout("filename", std::ios_base::out | std::ios_base::binary);
则不应执行行结束转换
这通常被认为是一个好主意,因为在文本模式下,流可能会出现奇怪的w.r.t.刷新。非常感谢,我没有想到这个问题。尽管我怀疑这个问题在linux中不会发生。对吗?@raven:同样的情况也适用,但由于Unix系统使用“\n”作为行尾,因此您确实不会注意到任何症状。不过,它仍然是坏代码。:)
std::ofstream fout("filename", std::ios_base::out | std::ios_base::binary);