не может правильно записать большие беззнаковые целые числа в двоичный файл - С++

В моем проекте мне нужно записать в двоичный файл последовательные беззнаковые целые числа, и важно, чтобы каждое число занимало ровно 4 байта. Но когда я открываю двоичный файл с помощью шестнадцатеричного редактора, я вижу это странное: числа написаны правильно только до числа 9; перед номером 10 он добавит еще один лишний байт и напишет '13' (и уже запутался с моим файлом). И продолжают происходить странные вещи - от числа 30 и далее будут писаться разные символы, по одному рядом с каждым числом. почему это? как исправить, хотя бы размер вопроса? Вот мой простой пример кода:

int main()
{
    string filename;
    cin >> filename;
    fstream mystream;
    mystream.open(filename, ios::out);
    if (mystream)
        for (unsigned int i = 0; i < 3200; i++)
            mystream.write((char*)&i, sizeof(unsigned int));
    mystream.close();

    return 0;
}

и прикреплено изображение того, что я вижу в файле: захват файла в шестнадцатеричном редакторе

Благодарность


person S.H.    schedule 13.04.2016    source источник
comment
Определение void main() в глобальном пространстве имен недопустимо в стандартном C++. Вы должны использовать стандартный int main().   -  person MikeCAT    schedule 14.04.2016
comment
Правильно. Я исправлю это;   -  person S.H.    schedule 14.04.2016


Ответы (1)


Число 10 является символом новой строки LF и преобразуется в CRLF, поскольку файл открывается в текстовом режиме.

Открывать файлы в двоичном режиме для работы с двоичными файлами.

#include <iostream>
#include <fstream>
#include <string>

using std::string;
using std::cin;
using std::fstream;
using std::ios;

int main()
{
    string filename;
    cin >> filename;
    fstream mystream;
    mystream.open(filename, ios::out | ios::binary); // add OR with ios::binary
    if (mystream)
        for (unsigned int i = 0; i < 3200; i++)
            mystream.write((char*)&i, sizeof(unsigned int));
    mystream.close();
}
person MikeCAT    schedule 13.04.2016