Jak uzyskać wartość ASCII znaku?

Jak uzyskać ASCII wartość znaku jako intw Python ?

 817
Author: martineau, 2008-10-23

4 answers

From here :

Funkcja ord() otrzyma wartość int char. I w razie gdybyś chciał konwersja z powrotem po zabawie z liczba, funkcja chr () robi sztuczkę.

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

W Pythonie 2 Istnieje również funkcja unichr, zwracająca znak Unicode , którego porządkiem jest argument unichr:

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

W Pythonie 3 możesz użyć chr zamiast unichr.


Ord () - Python 3.6.5rc1 dokumentacja

Ord () - Python 2.7.14 documentation

 1064
Author: Matt J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-26 12:42:14

Zauważ, że ord() nie daje wartości ASCII per se; daje wartość liczbową znaku w dowolnym kodowaniu, w którym jest. Dlatego wynik ord('ä') może wynosić 228, jeśli używasz Latin-1, lub może wywołać TypeError, Jeśli używasz UTF-8. Może nawet zwrócić kod Unicode, jeśli przekażesz mu kod unicode:

>>> ord(u'あ')
12354
 144
Author: Ignacio Vazquez-Abrams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-14 23:28:59

Szukasz:

ord()
 41
Author: Jacob Krall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-22 20:41:56

Przyjęta odpowiedź jest poprawna, ale istnieje bardziej sprytny / skuteczny sposób, aby to zrobić, jeśli chcesz przekonwertować całą masę znaków ASCII na ich kody ASCII na raz. Zamiast robić:

for ch in mystr:
    code = ord(ch)

Lub nieco szybszy:

for code in map(ord, mystr):

Konwertujesz na natywne typy Pythona, które bezpośrednio powtarzają kody. W Pythonie 3 jest to trywialne:

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

A w Pythonie 2.6/2.7 jest tylko nieco bardziej zaangażowany, ponieważ nie ma stylu Py3 bytes object (bytes jest aliasy dla str, które iterują według znaków), ale mają 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'):
W lokalnych testach zarówno Py2.7, jak i Py3.5, iteracja a str, aby uzyskać kody ASCII za pomocą map(ord, mystr), zaczyna się około dwa razy dłużej dla kodu ASCII. len 10 str w porównaniu z bytearray(mystr) na Py2 lub mystr.encode('ascii') na Py3, a gdy str wydłuża się, mnożnik zapłacony za map(ord, mystr) wzrasta do ~6,5 x-7x.

Jedynym minusem jest że nawrócenie jest wszystkie na raz, więc twój pierwszy wynik może potrwać trochę dłużej, a naprawdę ogromny str miałby proporcjonalnie duży tymczasowy bytes/bytearray, ale jeśli to nie zmusi cię do bicia stron, to raczej nie będzie miało znaczenia.

 16
Author: ShadowRanger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-18 18:56:30