В исходном файле C ++ '\ 0' представляет 0 байт. Однако строки C ++ обычно заканчиваются нулем, что означает, что '\ 0' представляет конец строки - что может быть причиной того, что испортил ваш файл.
Если вы действительно хотите сохранить 0 байт в файле данных, вам нужно использовать другую кодировку. Для упрощения можно использовать другой символ - например, 0xFF - который не отображается в ваших данных, или какой-либо формат длины / данных или что-то подобное.
Какую бы кодировку вы не выбрали, приложение, пишущее файл, и приложение, которое его читает, должны согласовать кодировку. И это совершенно новый кошмар.