Функция fwrite()
в C использует const void *restrict buffer
в качестве первого аргумента, поэтому вы можете напрямую передать указатель на свой struct
в качестве первого параметра.
http://en.cppreference.com/w/c/io/fwrite
например fwrite(&someStruct, sizeof(someStruct), 1, file);
Но в С++ для ostream::write()
требуется const char_type*
, что заставляет вас использовать reinterpret_cast
. (В Visual Studio 2013 он const char*
.)
http://en.cppreference.com/w/cpp/io/basic_ostream/write
например file.write(reinterpret_cast<char*>(&someStruct), sizeof(someStruct));
Почти во всех случаях двоичные данные, которые должны быть записаны в файлы, не являются массивом char
, поэтому почему стандарт предпочитает стиль, который кажется более сложным?
P.S.
1. Фактически я использовал метод write()
в ofstream
с режимом ios::binary
, но, согласно ссылке, он наследует ofstream
. Поэтому я использую ostream::write()
выше.
2. Если вы хотите напечатать поток символов, вы можете использовать operator<<()
.
Не метод write()
, предназначенный для записи необработанных данных?
3. Если write()
не способ записи двоичных данных, то каков способ сделать это в стандарте? (Хотя это может затруднить переносимость кода из-за различных стратегий выравнивания памяти на разных платформах)