views:

53

answers:

1

I have a simple program which I have compiled in both MinGW and Visual C++ 2008 Express, and both give an output file larger than 88200. When I set s = 0, both programs work as expected. What am I doing wrong?

#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;
}

+8  A: 

Try:

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

When you write out chars that happen to match the newline character \n they are being converted to the standard windows newline sequence \r\n. Opening the file in binary mode stops this conversion from being performed.

Charles Bailey