C++ cout двоичное значение

У меня есть один вопрос, у меня есть массив неподписанных символов, и я хочу напечатать их, но когда я использую cout, печатается другое значение.

Массив содержит значения в двоичном формате, без 0 и 1, но с символами представления.

Массив для печати:

[0] 147 unsigned char
[1] 252 'ü' unsigned char
[2] 170 'ª' unsigned char
[3] 194 'Â' unsigned char
[4] 108 'l' unsigned char

Что я имею:

ô
ⁿ
¬
┬
l

когда я записываю его в файл, представление корректно, потому что я открываю ofstream в режиме binay, но не могу найти, как сделать то же самое в cout.

С уважением

1 ответ

Вы жертва кодовых страниц.

В старые времена все, о чем мы должны были заботиться, были простые английские символы. Для этих символов мы определили набор символов ASCII. Он определяет 128 символов (от 0 до 127 десятичных) с печатными символами, начинающимися с 32 (пробел). Удобно, что набор символов ASCII умещается в 7 бит.

Используя неиспользуемый 8-й бит, можно было что-то сделать со значениями от 128 до 255. Проблема в том, что многие люди думали об этом одновременно, поэтому было много разных способов, которыми системы отображали бы эти лучшие 128 символов, для много разных языков.

В конце концов все это стало стандартизированным. Первые 128 символов везде одинаковы, но символы от 128 и выше определены в кодовых страницах.

Как прокомментировали chris и πάντα ῥεῖ, консоль Windows использует другую кодовую страницу ( кодовая страница 437), чем большая часть остальной части Windows, которая использует Windows-1252.

В заключение, ваш вывод верен в том смысле, что десятичные значения ввода и вывода одинаковы, но выглядит неправильно, потому что вы просматриваете их на разных кодовых страницах.

Другие вопросы по тегам