Ответы:
От сюда :
Функция ord () получит значение типа char. И в случае, если вы хотите преобразовать обратно после игры с числом, функция 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.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. В Python 3 (или unichrв Python 2) входной номер интерпретируется как целочисленный порядковый номер кодовой точки Unicode: unichr(0x439) == '\u0439'(первые 256 целых чисел имеют то же отображение, что и latin-1:, unichr(0xe9) == b'\xe9'.decode('latin-1')первые 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')это Unicode, а не Python).
Обратите внимание, что ord()само по себе значение ASCII не дает; он дает вам числовое значение символа в любой кодировке, в которой он находится. Следовательно, результат ord('ä')может быть 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, он только немного более сложный, потому что у него нет объекта стиля Py3 bytes( 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)начинается с примерно в два раза длиннее на len10 , strчем при использовании bytearray(mystr)на py2 или mystr.encode('ascii')на PY3, а также strполучает больше, множитель оплаченных map(ord, mystr)подъемов до ~ 6,5x-7x.
Единственным недостатком является то, что преобразование происходит одновременно, поэтому ваш первый результат может занять немного больше времени, а действительно огромный strбудет иметь пропорционально большое временное число bytes/ bytearray, но если это не заставит вас перебирать страницы, это вряд ли будет иметь значение ,