Respuestas:
Desde aquí :
La función ord () obtendría el valor int del char. Y en caso de que desee volver a convertir después de jugar con el número, la función chr () hace el truco.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
En Python 2, también existe la unichr
función, que devuelve el carácter Unicode cuyo ordinal es el unichr
argumento:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
En Python 3 puedes usar en chr
lugar de unichr
.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
. En Python 3 (o unichr
en Python 2), el número de entrada se interpreta como ordinal entero de punto de código Unicode: unichr(0x439) == '\u0439'
(los primeros 256 enteros tienen el mismo mapeo que latin-1: unichr(0xe9) == b'\xe9'.decode('latin-1')
el primer 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')
es una cosa Unicode, no Pitón).
Tenga en cuenta que ord()
no le da el valor ASCII per se; le da el valor numérico del carácter en cualquier codificación en la que se encuentre. Por lo tanto, el resultado ord('ä')
puede ser 228 si está usando Latin-1, o puede aumentar a TypeError
si está usando UTF-8. Incluso puede devolver el punto de código Unicode si lo pasa como unicode:
>>> ord(u'あ')
12354
Estás buscando:
ord()
La respuesta aceptada es correcta, pero hay una manera más inteligente / eficiente de hacer esto si necesita convertir un montón de caracteres ASCII a sus códigos ASCII a la vez. En lugar de hacer:
for ch in mystr:
code = ord(ch)
o el un poco más rápido:
for code in map(ord, mystr):
convierte a los tipos nativos de Python que iteran los códigos directamente. En Python 3, es trivial:
for code in mystr.encode('ascii'):
y en Python 2.6 / 2.7, solo está un poco más involucrado porque no tiene un bytes
objeto de estilo Py3 ( bytes
es un alias para str
, que itera por carácter), pero tienen 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'):
Codificar como un tipo que itera nativamente por ordinal significa que la conversión es mucho más rápida; en pruebas locales tanto en Py2.7 como en Py3.5, la iteración de a str
para obtener sus códigos ASCII usando map(ord, mystr)
comienza tomando aproximadamente el doble de tiempo por un len
10 str
que el uso bytearray(mystr)
en Py2 o mystr.encode('ascii')
Py3, y a medida que str
se alarga, el multiplicador paga por map(ord, mystr)
aumentos a ~ 6.5x-7x.
El único inconveniente es que la conversión es a la vez, por lo que su primer resultado podría tardar un poco más, y una verdaderamente enorme str
tendría un proporcionalmente grandes temporales bytes
/ bytearray
, pero a menos que las fuerzas de esta página en goleada, esto no es probable que importa .