【问题标题】:Why do I get corrupt output on my file?为什么我的文件输出损坏?
【发布时间】:2010-06-08 22:08:51
【问题描述】:

我有一个简单的程序,我在 MinGW 和 Visual C++ 2008 Express 中都编译过,并且都给出了大于 88200 的输出文件。当我设置 s = 0 时,两个程序都按预期工作。我做错了什么?

#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
    int i;
    short s;

    fstream f;

    f.open("test.raw", ios_base::out);

    for(i = 0; i < 44100; i++)
    {
        s = i & 0xFFFF; // PROBLEM?
        f.write(reinterpret_cast<const char *>(&s), sizeof(s));
    }

    f.close();

    return 0;
}

【问题讨论】:

  • 请注意,这种事情不会跨不同字节序的架构移植。 (至少,您将无法读取一个背对另一个写入的文件。)

标签: c++ int fstream short


【解决方案1】:

试试:

f.open("test.raw", ios_base::out | ios_base::binary);

当您写出恰好与换行符\n 匹配的chars 时,它们将被转换为标准的Windows 换行符序列\r\n。以二进制模式打开文件会停止执行此转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多