Почему я получаю испорченный вывод в моем файле? - PullRequest
2 голосов
/ 09 июня 2010

У меня есть простая программа, которую я скомпилировал как в 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;
}

1 Ответ

8 голосов
/ 09 июня 2010

Попробуйте:

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

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

...