Jak uzyskać wartość ASCII znaku?
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
.
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
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()
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.
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