2010-06-08 2 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

ответ

8

Try:

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

Когда вы выписывать char S, которые происходят в соответствии с символом новой строки \n они преобразовываются в стандартные окна новой строки последовательности \r\n. Открытие файла в двоичном режиме прекращает выполнение этого преобразования.

Смежные вопросы