2010-06-08 97 views
1

我有一个简单的程序,我已经编译了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; 
} 

+2

请注意,这种事情不会跨越不同的端元结构。 (至少,你将无法读取另一个写回的文件。) – Thanatos 2010-06-08 22:19:48

回答

8

尝试:

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

当你写出来char s表示发生在他们被转换成标准的windows行序列\r\n换行符\n匹配。以二进制模式打开文件将停止执行此转换。