Pregunta Valor ASCII de un personaje en Python


¿Cómo obtengo el ASCII valor de un personaje como int en Pitón?


796
2017-10-22 20:39


origen


Respuestas:


De aquí:

la función ord () obtendría el valor int   del char Y en caso de que quieras   convertir de nuevo después de jugar con el   número, función chr () hace el truco.

>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>

En Python 2, también está el unichr función, devolviendo el Unicode personaje cuyo ordinal es el unichr argumento:

>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'

En Python 3 puedes usar chr en lugar de unichr.


ord () - Documentación de Python 3.6.5rc1

ord () - Documentación de Python 2.7.14


1036
2017-10-22 20:43



Tenga en cuenta que ord() no le da el valor ASCII per se; te da el valor numérico del personaje en cualquier codificación. Por lo tanto, el resultado de ord('ä') puede ser 228 si está usando Latin-1, o puede generar TypeError si estás usando UTF-8. Incluso puede devolver el punto de código Unicode si lo pasa unicode:

>>> ord(u'あ')
12354

139
2017-10-22 23:19



Estás buscando:

ord()

41
2017-10-22 20:41



La respuesta aceptada es correcta, pero hay una manera más inteligente / eficiente de hacer esto si necesita convertir un conjunto completo de caracteres ASCII en sus códigos ASCII a la vez. En lugar de hacer:

for ch in mystr:
    code = ord(ch)

o el ligeramente más rápido:

for code in map(ord, mystr):

convierte a 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, es solo un poco más complicado porque no tiene un estilo Py3 bytes objeto (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'):

La codificación como un tipo que itera de forma nativa por ordinal significa que la conversión es mucho más rápida; en pruebas locales en Py2.7 y Py3.5, iterando un str para obtener sus códigos ASCII usando map(ord, mystr) comienza tomando aproximadamente el doble de tiempo para una len 10 str que usar bytearray(mystr) en Py2 o mystr.encode('ascii') en Py3, y como el str se hace más largo, el multiplicador pagado map(ord, mystr) se eleva a ~ 6.5x-7x.

El único inconveniente es que la conversión es todo a la vez, por lo que su primer resultado puede tomar un poco más de tiempo, y una enorme str tendría una proporcionalmente grande temporal bytes/bytearray, pero a menos que esto te obligue a moverte por la página, no es probable que esto importe.


14
2018-03-25 17:56