Coder Perfect

How to find a character’s ASCII value


In Python, how can I get the ASCII value of a character as an int?

Asked by Matt

Solution #1

From here:

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

The unichr method in Python 2 returned the Unicode character whose ordinal was the unichr argument:

>>> unichr(97)
>>> unichr(1234)

You can use chr instead of unichr in Python 3.

Python 3.6.5rc1 documentation for ord()

Python 2.7.14 documentation for ord()

Answered by Matt J

Solution #2

Note that ord() does not return the ASCII value; instead, it returns the character’s numeric value in whatever encoding it is in. If you’re using Latin-1, the result of ord(‘ä’) can be 228; if you’re using UTF-8, it can produce a TypeError. If you supply it a unicode: parameter, it will return the Unicode codepoint instead.

>>> ord(u'あ')

Answered by Ignacio Vazquez-Abrams

Solution #3

What you’re looking for is:


Answered by Jacob Krall

Solution #4

The approved answer is correct, but if you need to convert a large number of ASCII characters to their ASCII codes at once, there is a more clever/efficient way to do it. rather than doing:

for ch in mystr:
    code = ord(ch)

or the significantly quicker version:

for code in map(ord, mystr):

You transform the code to Python native types, which iterate it directly. It’s simple in Python 3:

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

It’s just slightly more complicated in Python 2.6/2.7 because it lacks a Py3-style bytes object (bytes is an alias for str, which iterates by character), but it does have 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'):

Iterating a str to get its ASCII codes using map(ord, mystr) takes around twice as long for a len 10 str as using bytearray(mystr) on Py2 or mystr.encode(‘ascii’) on Py3, and as the str gets longer, the multiplier paid for map(ord, mystr) rises to 6.5x-7x in local tests on both Py2.7 and Py3.5.

The main drawback is that the conversion happens all at once, so your initial result would take a bit longer, and a genuinely massive str would have a similarly large temporary bytes/bytearray, but this is unlikely to be an issue until you’re forced into page thrashing.

Answered by ShadowRanger

Solution #5

The ord() function can be used to obtain a character’s ASCII code.

As an example, consider the following code:

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


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

Answered by Indi

Post is based on