2010-06-08 96 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匹配。以二進制模式打開文件將停止執行此轉換。