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.
В заключение, ваш вывод верен в том смысле, что десятичные значения ввода и вывода одинаковы, но выглядит неправильно, потому что вы просматриваете их на разных кодовых страницах.