Ваш код записывает 4-8 символов в двоичный файл вместо 1, который вы ожидаете получить.control
рассматривается как обычный указатель, а sizeof(control)
интерпретирует указанный указатель без учета данных, на которые он указывает, и возвращает значение 4-8.
Лучший способ исправить это -объявите control
как один символ, как вы, вероятно, и предполагаете:
char control = '\x3';
fout.write(&control, sizeof(control));
Другой способ, если вам действительно нужно написать несколько символов, выглядит следующим образом:
const std::string control = "\x3";
fout.write(control.data(), control.size());
Любой метод будет правильно выводить ожидаемое количество символов.