Функция 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() не способ записи двоичных данных, то каков способ сделать это в стандарте? (Хотя это может затруднить переносимость кода из-за различных стратегий выравнивания памяти на разных платформах)