How do I get the ASCII value of a character as an int in Python?
7 Answers
From here:
The function
ord()gets the int value of the char. And in case you want to convert back after playing with the number, functionchr()does the trick.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
In Python 2, there was also the unichr function, returning the Unicode character whose ordinal is the unichr argument:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
In Python 3 you can use chr instead of unichr.
6 Comments
chr(31415) -> '窷'chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. In Python 3 (or unichr in Python 2), the input number is interpreted as Unicode codepoint integer ordinal: unichr(0x439) == '\u0439' (the first 256 integers has the same mapping as latin-1: unichr(0xe9) == b'\xe9'.decode('latin-1'), the first 128 -- ascii: unichr(0x0a) == b'\x0a'.decode('ascii') it is a Unicode thing, not Python).Note that ord() doesn't give you the ASCII value per se; it gives you the numeric value of the character in whatever encoding it's in. Therefore the result of ord('ä') can be 228 if you're using Latin-1, or it can raise a TypeError if you're using UTF-8. It can even return the Unicode codepoint instead if you pass it a unicode:
>>> ord(u'あ')
12354
3 Comments
The accepted answer is correct, but there is a more clever/efficient way to do this if you need to convert a whole bunch of ASCII characters to their ASCII codes at once. Instead of doing:
for ch in mystr:
code = ord(ch)
or the slightly faster:
for code in map(ord, mystr):
you convert to Python native types that iterate the codes directly. On Python 3, it's trivial:
for code in mystr.encode('ascii'):
and on Python 2.6/2.7, it's only slightly more involved because it doesn't have a Py3 style bytes object (bytes is an alias for str, which iterates by character), but they do 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'):
Encoding as a type that natively iterates by ordinal means the conversion goes much faster; in local tests on both Py2.7 and Py3.5, iterating a str to get its ASCII codes using map(ord, mystr) starts off taking about twice as long for a len 10 str than 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.
The only downside is that the conversion is all at once, so your first result might take a little longer, and a truly enormous str would have a proportionately large temporary bytes/bytearray, but unless this forces you into page thrashing, this isn't likely to matter.
Comments
You wanted to find out ASCII value of character. Now Im providing the code of ASCII value of a Character:
Code pattern in python: ord(character)
Code Example in python: ord('A')
Output:

Im providing the code of convert ASCII value to a Character:
Code pattern in python: chr(ASCII value)
Code Example in python: chr(66)
Comments
Numpy can also be used to get the ascii value of a character. It is particularly useful if you need to convert a lot of characters to their ascii/unicode codepoints. Depending on the number of characters, it could be orders of magnitude faster than calling ord in a loop.
To use it, wrap a string/character in a numpy array and view it as int, which returns the corresponding numeric value(s) of the character(s) in whatever encoding it is in.
import numpy as np
# if the characters are in a list
lst = ['a', 'ä', 'あ']
ary = np.array(lst).view(int).tolist() # [97, 228, 12354]
# if the characters are in a string
s = 'abc'
ar = np.array([s])
v = s_arr.view(int) # array([97, 98, 99])
As a side note: One feature of the view is that if you change the view, the original changes as well. For example, if we want to make all characters in ar upper case, we could do so by working on v:
v -= 32
print(ar) # ['ABC']
