【问题标题】:Ofstream::write writes extra bytes despite explicit source array尽管有明确的源数组,Ofstream::write 仍会写入额外的字节
【发布时间】:2013-08-30 04:15:06
【问题描述】:

我正在编写一个程序来生成位图图像。当我测试它时,我发现 C++ 正在写入额外的字节(在看似随机的位置),从而抵消了我所有的字节(随后弄乱了图像)。我从数组写入文件。我计算出数组的完整内容,它们是完美的,但是总是写入额外的字节。通过使用 ios::binary 标志打开文件已解决此问题。

如果我从完全相同的数组输出,为什么打开带有和不带有 ios::binary 标志的文件很重要。

使用 Code::Blocks 12.11,使用 C++0X 的默认编译器

【问题讨论】:

  • 你看数组内容的bytes了吗?例如,您的文本输出流可能会将 CR 转换为 CR/LF。我的问题是“为什么我要尝试将二进制数据写入文本输出流并期望它工作
  • Inspired 给出的答案与我的场景完美匹配.. 当它们进入 ofstream 时,我会查看各个字节(制作我自己的缓冲区)。
  • 优秀。它不是一个罕见的打嗝。很高兴你找到了答案。

标签: c++ ios arrays


【解决方案1】:

因为您很可能使用的是 Windows,并且对于某些特殊字符(例如换行符)在 text 文件中的表示方式有一些约定:例如Windows 中的\n 转换为\r\n,读取0x1E ("EOF") 会引发文件结束标志。如果您以二进制(非文本)模式打开文件,则不会发生这些转换。

即使您不使用 Windows:始终对二进制数据使用二进制模式,这是一种可移植的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多