Страницы

Поиск по вопросам

понедельник, 1 апреля 2019 г.

Преобразование char -> int цифры и буквы

Довольно часто в коде можно увидеть строки типа
char cdigit = '8'; int idigit = cdigit - '0';
Реже, но также встречается
char letter = 'd'; int letter_number = letter - 'a';
Открываем Страуструпа "Язык прогрммирования С++" специальное издание, "Бином-Пресс", 2008. Цитата (стр 110):
Небезопасно считать, ... что символы алфавита непрерывны (в стандарте EBCDIC между i и j имеется разрыв)
У Кернигана и Ритчи вышеприведенный код (по крайней мере по цифрам) встречается регулярно.
Собственно вопрос по цифрам: обязательно ли корректен код idigit = cdigit - '0'?


Ответ

В стандарте C++ §2.3/4 гласит:
In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.
то есть
В обоих наборе символов исходного текста и времени выполнения, значение каждого символа после 0 в приведённом выше списку десятичных цифр должно быть на единицу больше предыдущего.
(перевод мой). Приведённый в §2.3/1 набор цифр таков:
0 1 2 3 4 5 6 7 8 9
Это гарантирует последовательность значений кодов цифр.

Комментариев нет:

Отправить комментарий