python - tabla - ¿Cómo obtener el valor ASCII de un personaje?
tabla ascii (4)
Desde here
La función ord () obtendría el valor int del char. Y en caso de que quiera 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 está la función unichr
, que devuelve el carácter Unicode cuyo ordinal es el argumento unichr
:
>>> unichr(97)
u''a''
>>> unichr(1234)
u''/u04d2''
En Python 3 puedes usar chr
lugar de unichr
.
Estás buscando:
ord()
La respuesta aceptada es correcta, pero hay una forma más inteligente / eficiente de hacerlo 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 un poco más rápido:
for code in map(ord, mystr):
usted 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 es un poco más complicado porque no tiene un objeto de bytes
estilo Py3 ( bytes
es un alias para str
, que se itera por carácter), pero sí 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''):
La codificación como un tipo que se itera de forma nativa por ordinal significa que la conversión va mucho más rápido; en las pruebas locales tanto en Py2.7 como en Py3.5, la iteración de una str
para obtener sus códigos ASCII utilizando map(ord, mystr)
comienza demorando aproximadamente el doble para una len
10 str
que utilizando bytearray(mystr)
en Py2 o mystr.encode(''ascii'')
en Py3, y a medida que el str
hace más largo, el multiplicador pagado por map(ord, mystr)
aumenta a ~ 6.5x-7x.
El único inconveniente es que la conversión es de una sola vez, por lo que su primer resultado puede tardar un poco más, y una str
realmente enorme tendrá una gran cantidad de bytes
/ bytearray
temporales proporcionalmente grandes, pero a menos que esto lo obligue a pasar a la página, esto no es probable que importe
Tenga en cuenta que ord()
no le proporciona 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 de ord(''ä'')
puede ser 228 si está usando Latin-1, o puede generar un TypeError
si está usando UTF- 8. Incluso puede devolver el punto de código Unicode si le pasas un código Unicode:
>>> ord(u''あ'')
12354