jfaFan
@jfaFan
Student, interested in programming

Представление символа в char?

Извиняюсь за возможно глупый вопрос.

Символы в ASCII кодируются значениями от 0 до 255 (256 всего). Символ ╬ имеет код 206.
Если вывести
char c = "╬";
printf("%d", (int)c);

то получится -50

Каким образом сопоставляется данный код с кодом в таблице ASCII?
Это зависит от особенностей компилятора, системы?
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
gbg
@gbg
Баянист. Тамада. Услуги.
Просто char в сишечке знаковый, вы его преобразуйте в uint8_t вместо int и будет правильное значение.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
wisgest
@wisgest
Не ИТ-специалист. Рабочий. Шизоидный психопат.
Используйте для символов беззнаковый тип:
unsigned char c = '╬';
printf("%d", c);
Ответ написан
OCTAGRAM
@OCTAGRAM
Поправка: символы в ASCII кодируются от 0 до 127, и знаковость char на них не распространяется.

Всё, что за пределами 127, — это Latin-1, OEM, ANSI, UTF-8, что угодно, но не ASCII. Пишут, что всё это называют расширенным ASCII, но как можно о чём-то говорить, если это КОИ-8, и другие кодировки.

Приведённый код не переносим. Например, в Windows 10 есть возможность для старых программ врубить кодировку UTF-8 вместо всяких 1251 и 866. Там ваши ╬ совсем по-другому кодируются. Используйте только Юникод. В разных языках программирования и разных трансляторах качество стандартной библиотеки варьируется. Если стандартная библиотека бяка, придётся через API операционки работать, пока там до этих жирафов дойдёт.

Хорошим тоном будет, обнаружив консоль, писать в неё через юникодные API, а, обнаружив перенаправление, писать байты UTF-8, игнорируя ACP_OEM и пр., чтоб быстрее похоронить зоопарк всего, отличного от Юникода.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы