Hoe de ASCII-waarde van een teken te krijgen

Hoe krijg ik de ASCII-waarde van een teken als een intin Python?


Antwoord 1, autoriteit 100%

Van hier:

De functie ord()krijgt de int-waarde
van de char. En mocht je dat willen
terug converteren na het spelen met de
nummer, functie chr()doet het.

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

In Python 2 was er ook de functie unichr, die de Unicode-teken waarvan het ordinaal het argument unichris:

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

In Python 3 kun je chrgebruiken in plaats van unichr.


ord() – Python 3.6.5rc1-documentatie

ord() – Python 2.7.14-documentatie


Antwoord 2, autoriteit 12%

Merk op dat ord()u niet per se de ASCII-waarde geeft; het geeft je de numerieke waarde van het teken in welke codering het ook is. Daarom kan het resultaat van ord('ä')228 zijn als je Latin-1 gebruikt, of het kan een TypeErrorals u UTF-8 gebruikt. Het kan zelfs het Unicode-codepunt teruggeven als je het een unicode doorgeeft:

>>> ord(u'あ')
12354

Antwoord 3, autoriteit 4%

U zoekt:

ord()

Antwoord 4, autoriteit 3%

Het geaccepteerde antwoord is correct, maar er is een slimmere/efficiëntere manier om dit te doen als u een hele reeks ASCII-tekens in één keer naar hun ASCII-codes moet converteren. In plaats van te doen:

for ch in mystr:
    code = ord(ch)

of de iets snellere:

for code in map(ord, mystr):

je converteert naar native Python-typen die de codes rechtstreeks herhalen. Op Python 3 is het triviaal:

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

en op Python 2.6/2.7 is het maar iets ingewikkelder omdat het geen bytes-object in Py3-stijl heeft (bytesis een alias voor str, die op teken herhaalt), maar ze hebben wel 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'):

Codering als een type dat native itereert door ordinaal betekent dat de conversie veel sneller gaat; in lokale tests op zowel Py2.7 als Py3.5, begint het herhalen van een strom de ASCII-codes te krijgen met behulp van map(ord, mystr)ongeveer twee keer zo lang voor a len10 strdan bytearray(mystr)op Py2 of mystr.encode('ascii')op Py3, en naarmate de strlanger wordt, stijgt de vermenigvuldiger die wordt betaald voor map(ord, mystr)naar ~6.5x-7x.

Het enige nadeel is dat de conversie in één keer gebeurt, dus je eerste resultaat kan wat langer duren, en een werkelijk enorme strzou een proportioneel grote tijdelijke bytes/bytearray, maar tenzij dit je dwingt om pagina’s te gebruiken, maakt dit waarschijnlijk niet uit.


Antwoord 5

Om de ASCII-code van een teken te krijgen, kun je de functie ord()gebruiken.

Hier is een voorbeeldcode:

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

Uitvoer:

Your value here: qwerty
[113, 119, 101, 114, 116, 121]

Other episodes