Вопрос

Как получить ASCII значение символа в виде int в Python ?

Это было полезно?

Решение

С здесь :

  

функция 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 () - документация по Python 3.6.5rc1

ord () - документация по Python 2.7.14

Другие советы

Обратите внимание, что 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 , но если это не заставит вас перебирать страницу, это вряд ли имеет значение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top