Как получить значение ASCII символа?
Решение
С здесь :
функция ord () получит значение int чарса И в случае, если вы хотите преобразовать обратно после игры с число, функция chr () делает свое дело.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
В Python 2 также есть функция unichr
, возвращающая Unicode символ, порядковый номер которого является аргументом unichr
:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
В Python 3 вы можете использовать chr
вместо unichr
.
Другие советы
Обратите внимание, что ord ()
не дает само значение ASCII; он дает вам числовое значение символа в любой кодировке, в которой он находится. Следовательно, результат ord ('& # 228;')
может быть 228, если вы используете Latin-1, или он может поднять TypeError
, если вы используете UTF-8. Вместо этого он может даже вернуть код Unicode, если вы передадите ему Unicode:
>>> ord(u'あ')
12354
Вы ищете:
ord()
Принятый ответ правильный, но есть более умный / эффективный способ сделать это, если вам нужно конвертировать целую кучу символов ASCII в их коды ASCII одновременно. Вместо того, чтобы делать:
for ch in mystr:
code = ord(ch)
или чуть быстрее:
for code in map(ord, mystr):
вы конвертируете в нативные типы Python, которые итерируют коды напрямую. На Python 3 это тривиально:
for code in mystr.encode('ascii'):
и в Python 2.6 / 2.7, он только немного более сложный, потому что у него нет объекта bytes
в стиле Py3 ( bytes
является псевдонимом для str
, который повторяется по символам), но у них есть bytearray
:
# If mystr is definitely str, not unicode
for code in bytearray(mystr):
# If mystr could be either str or unicode
for code in bytearray(mystr, 'ascii'):
Кодирование как тип, который итеративно повторяется по порядковому номеру, означает, что преобразование происходит намного быстрее; в локальных тестах на Py2.7 и Py3.5 повторение str
для получения его кодов ASCII с использованием map (ord, mystr)
начинается примерно вдвое дольше для len
10 str
, чем при использовании bytearray (mystr)
в Py2 или mystr.encode ('ascii')
в Py3, и когда str
становится длиннее, множитель, выплачиваемый за карту (ord, mystr)
, увеличивается до ~ 6,5x-7x.
Единственным недостатком является то, что преобразование выполняется одновременно, поэтому ваш первый результат может занять немного больше времени, и действительно огромная str
будет иметь пропорционально большие временные байты
/ bytearray
, но если это не заставит вас перебирать страницу, это вряд ли имеет значение.