【问题标题】:Why does ofstream insert a 0x0D byte before 0x0A?为什么ofstream会在0x0A之前插入一个0x​​0D字节?
【发布时间】:2011-03-02 21:08:08
【问题描述】:

我正在使用 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};

在输出文件中,我在0x090x0A 之间得到一个虚假的0x0D。在要打印之前,我在调试模式下检查了数组并且它没有改变。请告诉我你对这个问题的看法。

【问题讨论】:

    标签: c++ ofstream


    【解决方案1】:

    您的信息流以文本模式打开,由于0x0A 是换行符 (LF),您的信息流将其转换为 0x0D0x0A,即 CR/LF。

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

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

    那么不应该执行换行符。

    无论如何,这通常被认为是一个好主意,因为流可能会变得很奇怪。在文本模式下刷新。

    【讨论】:

    • 非常感谢,我没有想到这个问题。虽然我怀疑这个问题在linux中不会发生。对吗?
    • @raven:同样的情况也适用,但是由于 Unix 系统无论如何都使用“\n”作为行尾,所以实际上你不会注意到任何症状。不过,它仍然是损坏的代码。 :)
    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多