The streaming operator <<
does formatted output - it converts values to text. This is not what you want for writing to a binary file format.
Вместо этого вы хотите использовать , неотформатированные функции вывода: , помещенный
для единственных байтов и , пишет
для многократных байтов:
file.write("RIFF", 4);
// The length field is little-endian, so write the lowest byte first
file.put(length);
file.put(length >> 8);
file.put(length >> 16);
file.put(length >> 24);
file.write("WAVE", 4);
ОБНОВЛЕНИЕ: как отмечено в комментариях, необходимо также открыть файл в режиме двоичного счета и наполнить его классическим "C" местом действия, чтобы препятствовать тому, чтобы что-либо бездельничало с байтами, которые вы пишете:
file.open("sound.wav", std::ios_base::out | std::ios_base::binary);
file.imbue(std::locale::classic());