Matt
Matt

Reputation: 88137

How to get the ASCII value of a character

How do I get the ASCII value of a character as an int in Python?

Upvotes: 1350

Views: 1881437

Answers (7)

MD. SHIFULLAH
MD. SHIFULLAH

Reputation: 1759

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: enter image description here

Im providing the code of convert ASCII value to a Character:

Code pattern in python: chr(ASCII value)

Code Example in python: chr(66)

Output: enter image description here

Upvotes: 2

cottontail
cottontail

Reputation: 23331

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']

Upvotes: 0

Matt J
Matt J

Reputation: 45233

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, function chr() 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.


ord() - Python 3.6.5rc1 documentation

ord() - Python 2.7.14 documentation

Upvotes: 1800

Indi
Indi

Reputation: 429

To get the ASCII code of a character, you can use the ord() function.

Here is an example code:

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

Output:

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

Upvotes: 7

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 799230

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

Upvotes: 190

ShadowRanger
ShadowRanger

Reputation: 155576

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.

Upvotes: 47

Jacob Krall
Jacob Krall

Reputation: 28835

You are looking for:

ord()

Upvotes: 70

Related Questions