Frage ASCII-Wert eines Zeichens in Python


Wie bekomme ich das? ASCII Wert eines Zeichens als int in Python?


796
2017-10-22 20:39


Ursprung


Antworten:


Von Hier:

Funktion ord () würde den int-Wert erhalten   der Char. Und falls du willst   zurück konvertieren nach dem Spielen mit dem   Nummer, Funktion chr () macht den Trick.

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

In Python 2 gibt es auch die unichr Funktion, Rückgabe der Unicode Charakter, dessen Ordnungszahl der ist unichr Streit:

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

In Python 3 können Sie verwenden chr Anstatt von unichr.


ord () - Python 3.6.5rc1 Dokumentation

ord () - Python 2.7.14 Dokumentation


1036
2017-10-22 20:43



Beachten Sie, dass ord() gibt Ihnen nicht den ASCII-Wert an sich; es gibt Ihnen den numerischen Wert des Zeichens in welcher Codierung auch immer es ist. Daher das Ergebnis von ord('ä') kann 228 sein, wenn Sie Latin-1 verwenden, oder es kann eine erhöhen TypeError wenn Sie UTF-8 verwenden. Es kann sogar den Unicode-Codepunkt zurückgeben, wenn Sie ihm einen Unicode übergeben:

>>> ord(u'あ')
12354

139
2017-10-22 23:19



Du suchst nach:

ord()

41
2017-10-22 20:41



Die angenommene Antwort ist korrekt, aber es gibt eine cleverere / effizientere Methode, dies zu tun, wenn Sie eine ganze Reihe von ASCII-Zeichen gleichzeitig in ihre ASCII-Codes konvertieren müssen. Anstatt zu tun:

for ch in mystr:
    code = ord(ch)

oder das etwas schnellere:

for code in map(ord, mystr):

Sie konvertieren in native Python-Typen, die die Codes direkt durchlaufen. Bei Python 3 ist es trivial:

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

und auf Python 2.6 / 2.7 ist es nur etwas komplizierter, da es keinen Py3-Stil hat bytes Objekt (bytes ist ein Alias ​​für str, die nach Charakter iteriert), 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 Codierung als ein Typ, der nativ nach Ordinalzahl iteriert, bedeutet, dass die Konvertierung viel schneller abläuft; in lokalen Tests auf Py2.7 und Py3.5, Iterieren a str um seine ASCII-Codes zu erhalten map(ord, mystr) beginnt für eine etwa doppelt so lange zu nehmen len 10 str als zu benutzen bytearray(mystr) auf Py2 oder mystr.encode('ascii') auf Py3, und als str wird länger, der Multiplikator bezahlt map(ord, mystr) steigt auf ~ 6.5x-7x.

Der einzige Nachteil ist, dass die Konvertierung auf einmal erfolgt, also könnte Ihr erstes Ergebnis ein wenig länger dauern, und ein wirklich enormes str hätte eine verhältnismäßig große temporäre bytes/bytearray, aber wenn Sie nicht dazu gezwungen werden, die Seite zu verprügeln, ist dies wahrscheinlich nicht wichtig.


14
2018-03-25 17:56