Question Valeur ASCII d'un caractère en Python


Comment puis-je obtenir le ASCII valeur d'un caractère en tant que int dans Python?


796
2017-10-22 20:39


origine


Réponses:


De ici:

La fonction ord () obtiendrait la valeur int   du char. Et au cas où vous voulez   reconvertir après avoir joué avec le   nombre, la fonction chr () fait l'affaire.

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

En Python 2, il y a aussi unichr fonction, renvoyant le Unicode personnage dont l'ordinal est le unichr argument:

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

En Python 3, vous pouvez utiliser chr au lieu de unichr.


ord () - Documentation Python 3.6.5rc1

ord () - Documentation de Python 2.7.14


1036
2017-10-22 20:43



Notez que ord() ne vous donne pas la valeur ASCII en soi; il vous donne la valeur numérique du caractère quel que soit le codage. Par conséquent, le résultat de ord('ä') peut être 228 si vous utilisez Latin-1, ou il peut soulever un TypeError si vous utilisez UTF-8. Il peut même retourner le codecode Unicode à la place si vous lui passez unicode:

>>> ord(u'あ')
12354

139
2017-10-22 23:19



Tu recherches:

ord()

41
2017-10-22 20:41



La réponse acceptée est correcte, mais il existe un moyen plus astucieux / efficace de le faire si vous devez convertir tout un tas de caractères ASCII en leurs codes ASCII à la fois. Au lieu de faire:

for ch in mystr:
    code = ord(ch)

ou légèrement plus rapide:

for code in map(ord, mystr):

vous convertissez en types natifs Python qui parcourent directement les codes. Sur Python 3, c'est trivial:

for code in mystr.encode('ascii'):

et sur Python 2.6 / 2.7, il n'est que légèrement plus impliqué car il n'a pas de style Py3 bytes objet (bytes est un alias pour str, qui itère par caractère), mais ils ont 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'):

L'encodage en tant que type qui itérativement par ordinal signifie que la conversion va beaucoup plus vite; dans des tests locaux à la fois sur Py2.7 et Py3.5, en répétant une str pour obtenir ses codes ASCII en utilisant map(ord, mystr) commence à prendre environ deux fois plus longtemps pour un len dix str que d'utiliser bytearray(mystr) sur Py2 ou mystr.encode('ascii') sur Py3, et comme str devient plus long, le multiplicateur payé pour map(ord, mystr) s'élève à ~ 6,5x-7x.

Le seul inconvénient est que la conversion est tout à la fois, donc votre premier résultat pourrait prendre un peu plus longtemps, et un énorme str aurait une proportionnellement grande temporaire bytes/bytearray, mais à moins que cela ne vous oblige à vous débattre, cela n'a pas d'importance.


14
2018-03-25 17:56