Wie man den ASCII-Wert eines Zeichens?
Lösung
hier :
Funktion ord () würde den int-Wert erhalten der Kohle. Und falls Sie zu konvertieren zurück, nachdem er mit dem Spielen Nummer, Funktion chr () funktioniert der Trick.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
In Python 2, gibt es auch die unichr
Funktion, Rücksendung der Unicode Charakter, dessen Ordnungszahl ist das unichr
Argument:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
In Python 3 Sie chr
statt unichr
verwenden können.
Andere Tipps
Beachten Sie, dass ord()
nicht geben Sie den ASCII-Wert per se; es gibt Ihnen den numerischen Wert des Zeichens in was auch immer Codierung es ist in. Deshalb ist das Ergebnis von ord('ä')
228 sein kann, wenn Sie Latin-1 verwenden, oder es kann eine TypeError
zu erhöhen, wenn Sie UTF-8 verwenden. Es kann sogar zurückgeben den Unicode-Codepoint statt, wenn Sie es eine Unicode übergeben:
>>> ord(u'あ')
12354
Sie suchen:
ord()
Die akzeptierte Antwort ist korrekt, aber es gibt noch einen besseren/effizienteren Weg, dies zu tun, wenn Sie brauchen, um zu konvertieren eine ganze Reihe von ASCII-Zeichen in Ihren ASCII-codes auf einmal.Anstatt das zu tun:
for ch in mystr:
code = ord(ch)
oder die etwas schneller:
for code in map(ord, mystr):
konvertieren Sie Python native Typen, die iterativ die codes direkt.Auf Python 3, es ist trivial:
for code in mystr.encode('ascii'):
und auf Python 2.6/2.7, es ist nur ein bisschen mehr beteiligt, weil es nicht haben eine Py3-Stil bytes
object (bytes
ist ein alias für str
, die iteriert durch Zeichen), aber Sie haben 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'):
Die Kodierung von einem Typ, der nativ iteriert durch Ordnungszahlen bezeichnet die Umwandlung viel schneller geht;in lokalen tests an den beiden Py2.7 und Py3.5, Durchlaufen eine str
die ASCII-codes unter Verwendung map(ord, mystr)
beginnt, wobei etwa doppelt so lange für eine len
10 str
als mit bytearray(mystr)
auf Py2 oder mystr.encode('ascii')
auf Py3, und als die str
wird länger, der Multiplikator bezahlt map(ord, mystr)
steigt auf ~6,5 x-7x.
Der einzige Nachteil ist, dass die Konvertierung ist alles auf einmal, so dass Ihre erste Ergebnis vielleicht ein wenig länger dauern, und eine riesige str
würde eine proportional große temporäre bytes
/bytearray
, aber es sei denn, dies zwingt Sie in die Seite Tracht Prügel, das ist nicht wahrscheinlich egal.