Jak uzyskać wartość ASCII znaku

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

 1105
Author: Peter Mortensen, 2008-10-22

5 answers

From here :

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

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

W Pythonie 2 pojawiła się 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

 1440
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
2021-01-15 15:14:12

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
 175
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()
 54
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.

 40
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

Aby uzyskać kod ASCII znaku, możesz użyć funkcji ord().

Oto przykładowy kod:

value = input("Your value here: ")
list=[ord(ch) for ch in value]
print(list)

Wyjście:

Your value here: qwerty
[113, 119, 101, 114, 116, 121]
 5
Author: Upz,
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
2019-11-01 06:21:27