Domanda

Come posso ottenere il ASCII di un personaggio come int in Python ?

È stato utile?

Soluzione

Da qui :

  La funzione

ord () otterrebbe il valore int   del salmerino. E nel caso lo desideri   riconvertire dopo aver giocato con il   numero, funzione chr () fa il trucco.

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

In Python 2 c'è anche la funzione unichr , che restituisce Unicode carattere il cui ordinale è l'argomento unichr :

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

In Python 3 puoi usare chr invece di unichr .


ord () - Documentazione di Python 3.6.5rc1

ord () - Documentazione Python 2.7.14

Altri suggerimenti

Nota che ord () non ti dà il valore ASCII in sé; ti dà il valore numerico del personaggio in qualunque codifica sia. Pertanto il risultato di ord ('& # 228;') può essere 228 se stai usando Latin-1, oppure può genera un TypeError se stai usando UTF-8. Può anche restituire il punto di codice Unicode invece se gli passi un unicode:

>>> ord(u'あ')
12354

Stai cercando:

ord()

La risposta accettata è corretta, ma esiste un modo più intelligente / efficiente per farlo se è necessario convertire contemporaneamente un intero gruppo di caratteri ASCII nei loro codici ASCII. Invece di fare:

for ch in mystr:
    code = ord(ch)

o leggermente più veloce:

for code in map(ord, mystr):

converti in tipi nativi di Python che ripetono direttamente i codici. Su Python 3, è banale:

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

e su Python 2.6 / 2.7, è solo leggermente più coinvolto perché non ha un oggetto byte in stile Py3 ( byte è un alias per str , che scorre per carattere), ma hanno 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 codifica come tipo che scorre in modo nativo ordinale significa che la conversione procede molto più velocemente; nei test locali su Py2.7 e Py3.5, iterando un str per ottenere i suoi codici ASCII usando map (ord, mystr) inizia impiegando circa il doppio del tempo per un len 10 str rispetto all'uso di bytearray (mystr) su Py2 o mystr.encode ('ascii') su Py3 e man mano che il str si allunga, il moltiplicatore pagato per map (ord, mystr) sale a ~ 6.5x-7x.

L'unico aspetto negativo è che la conversione è tutta in una volta, quindi il tuo primo risultato potrebbe richiedere un po 'più di tempo, e un str veramente enorme avrebbe un byte temporaneo proporzionalmente grande / bytearray , ma a meno che ciò non ti costringa a sfogliare le pagine, è improbabile che sia importante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top