2008-10-22 13 views

Antwort

950

Von here:

Funktion ord() würde den int-Wert des char erhalten. Und wenn Sie zurück konvertieren möchten, nachdem Sie mit der Nummer gespielt haben, funktioniert die Funktion chr().

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

In Python 2, gibt es auch die unichr Funktion, Rückführen des Unicode Charakter, dessen Ordnungszahl ist die unichr Argument:

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

In Python 3 Sie chr statt unichr verwenden können.

+0

welche encodierung in chr mit? – njzk2

+0

@ njzk2: 'latin1' (das ist keine geniale Sache, wenn dein ursprüngliches Byte in" cp1251 "geschrieben wurde (kyrillisch) –

+13

Beachte, dass chr in Python 3 auch unichr ist. ' chr (31415) -> '窷' ' – William

38

Sie suchen:

ord() 
134

Beachten Sie, dass ord() nicht den ASCII-Wert per se angibt; es gibt Ihnen den numerischen Wert des Zeichens in welcher Codierung es auch ist. Daher kann das Ergebnis von ord ('ä') 228 sein, wenn Sie Latin-1 verwenden, oder es kann einen TypeError auslösen, wenn Sie UTF- verwenden. 8. Es kann sogar den Unicode-Codepunkt zurückkehrt statt, wenn Sie ein Unicode-Pass:

>>> ord(u'あ') 
12354 
+6

Wie können Sie herausfinden, welche Codierung Sie in einer bestimmten Situation verwenden? – Moustache

12

Die akzeptierte Antwort ist richtig, aber es ist ein schlauer/effizienter Weg, dies zu tun, wenn Sie eine ganze Reihe von ASCII konvertieren Zeichen zu ihren ASCII-Codes gleichzeitig. Statt tun:

for ch in mystr: 
    code = ord(ch) 

oder die etwas schneller:

for code in map(ord, mystr): 

konvertieren Sie Python native Typen, die Codes direkt iterieren. Auf Python 3, es ist trivial:

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

und auf Python 2.6/2.7, es ist nur etwas mehr beteiligt, weil es keine PY3 Stil bytes Objekt hat (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'): 

Encoding als eine Art, die native iteriert durch die Ordnungs bedeutet die Umwandlung geht viel schneller; in lokalen Tests sowohl auf Py2.7 und Py3.5, Iterieren ein str, um seine ASCII-Codes zu erhalten unter Verwendung map(ord, mystr) beginnt etwa doppelt so lange für eine als mit bytearray(mystr) auf Py2 oder mystr.encode('ascii') auf Py3, und wie die str wird länger steigt der Multiplikator für map(ord, mystr) auf ~ 6,5x-7x.

Der einzige Nachteil ist, dass die Umstellung auf einmal, so dass Ihre erste Ergebnis könnte etwas länger dauern, und eine wirklich enorme str würde eine verhältnismäßig große temporäre bytes/bytearray, aber es sei denn, dies zwingt Sie in Seite Dreschen, Das dürfte nicht wichtig sein.

Verwandte Themen