Reputation: 88137
How do I get the ASCII value of a character as an int
in Python?
Upvotes: 1350
Views: 1881437
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:
Im providing the code of convert ASCII value to a Character:
Code pattern in python: chr(ASCII value)
Code Example in python: chr(66)
Upvotes: 2
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
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, 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
.
ord() - Python 3.6.5rc1 documentation
ord() - Python 2.7.14 documentation
Upvotes: 1800
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
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
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