如何在Python中获取字符的ASCII值?int
从这里:
函数ord()将获取char的int值.如果您想在使用数字后转换回来,函数chr()可以解决问题.
>>> ord('a') 97 >>> chr(97) 'a' >>> chr(ord('a') + 3) 'd' >>>
在Python 2中,还有unichr
函数,返回其序数为参数的Unicode字符unichr
:
>>> unichr(97) u'a' >>> unichr(1234) u'\u04d2'
在Python 3中,您可以使用chr
而不是unichr
.
ord() - Python 3.6.5rc1文档
ord() - Python 2.7.14文档
请注意,ord()
这不会给你ASCII值; 它为你提供了它所在的任何编码的字符的数值.因此,ord('ä')
如果你使用Latin-1,结果可以是228,或者TypeError
如果你使用的是UTF-8 ,它可以提高a .如果你传递一个unicode,它甚至可以返回Unicode代码点:
>>> ord(u'?') 12354
您正在寻找:
ord()
接受的答案是正确的,但如果您需要将一大堆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的本地测试中,迭代a str
以使用map(ord, mystr)
启动获取其ASCII代码,使用大约两倍于len
10 或者str
使用bytearray(mystr)
Py2或mystr.encode('ascii')
Py3,并且随着str
时间的延长,乘数map(ord, mystr)
增加到~6.5x-7x.
唯一的缺点是转换是一次性的,所以你的第一个结果可能需要更长的时间,真正巨大的str
将有一个相应大的临时bytes
/ bytearray
,但除非这会迫使你进行页面颠簸,这不太重要.