代码之家  ›  专栏  ›  技术社区  ›  Graphics Noob

为什么C++流写()方法修改原始数据?

  •  6
  • Graphics Noob  · 技术社区  · 16 年前

    我在内存中的char[]缓冲区中有一个jpeg图像,我所需要做的就是完全按照原样将其写入磁盘。现在我正在做这件事

    ofstream ofs;
    ofs.open(filename);
    ofs.write(buffer, bufferLen);
    ofs.close();
    

    但这张图片显示的并不正确,它看起来到处都是随机的黑白条纹。在将图像与十六进制查看器中的原始图像进行比较后,我发现ofstream在认为我正在编写换行符时正在修改数据。在原始文件中显示0x0A的任何地方,ofstream都以两个字节的形式写入:0x0D0A。我必须假设ofstream打算只从LF转换为CRLF,有没有标准的方法让它不这样做?

    5 回复  |  直到 16 年前
        1
  •  9
  •   Owen    16 年前

    打开文件时,将模式设置为二进制:

    http://www.cplusplus.com/reference/iostream/ofstream/ofstream/

        2
  •  9
  •   sth    16 年前

    您应该将文件模式设置为 binary opening

    std::ofstream file;
    file.open("filename.jpg", std::ios_base::out | std::ios_base::binary);
    

    通过这种方式,流不会尝试将换行符调整为本机文本格式。

        3
  •  5
  •   cjcela    16 年前

    ofstream ofs;
    ofs.open(filename, ios::out | ios::binary);
    ofs.write(buffer, bufferLen);
    ofs.close();
    
        4
  •  1
  •   user153062 user153062    16 年前

        5
  •  -2
  •   Dave    12 年前

    我希望我的版本能写任何东西。。。没有错误,没有抱怨,调试时没有问题,但它甚至没有尝试创建文件。 fopen、fwrite和fclose到底怎么了。。。我从来没有和他们有过矛盾