如何在Python中获取字符的ASCII值为int ?


你正在寻找:

ord()

从这里开始:

函数ord()获取int值 焦的。如果你想的话 转换回来后玩 数字,函数chr()做的技巧。

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

在python2中,还有unichr函数,返回序号为unichr参数的Unicode字符:

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

在python3中,您可以使用chr而不是unichr。


ord() - Python 3.6.5rc1文档

ord() - Python 2.7.14文档


注意,ord()本身并没有给你ASCII值;它给你字符的数值,不管它是什么编码。因此,如果你使用Latin-1, ord('ä')的结果可能是228,如果你使用UTF-8,它可能引发TypeError。如果你传递一个Unicode,它甚至可以返回Unicode代码点:

>>> ord(u'あ')
12354

公认的答案是正确的,但是如果您需要将一大堆ASCII字符立即转换为它们的ASCII码,则有一种更聪明/有效的方法来做到这一点。而不是做:

for ch in mystr:
    code = ord(ch)

或者稍微快一点的:

for code in map(ord, mystr):

你转换为Python原生类型,直接迭代代码。在Python 3中,这很简单:

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

在Python 2.6/2.7中,它只是稍微复杂一些,因为它没有Py3风格的bytes对象(bytes是str的别名,按字符迭代),但它们有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'):

编码为原生按序号迭代的类型意味着转换要快得多;在Py2.7和Py3.5的本地测试中,使用map(ord, mystr)迭代一个str以获得其ASCII码,开始时使用len 10 str的时间大约是在Py2上使用bytearray(mystr)或在Py3上使用mystr.encode(' ASCII ')的两倍,随着str变长,为map(ord, mystr)支付的乘数上升到~6.5x-7x。

唯一的缺点是转换是一次性完成的,因此您的第一个结果可能需要更长的时间,而真正巨大的str将具有相应大的临时bytes/bytearray,但除非这迫使您进行页面抖动,否则这可能无关紧要。


要获取字符的ASCII码,可以使用ord()函数。

下面是一个示例代码:

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

输出:

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