Python中字符的ASCII值
如何在Python中将字符的ASCII值作为int来获取?
从这里 :
函数ord()会得到char的int值。 如果你想在转换回数字后转换回来,函数chr()就可以实现。
>>> ord('a') 97 >>> chr(97) 'a' >>> chr(ord('a') + 3) 'd' >>>
在Python 2中,还有unichr
函数,返回序号为unichr
参数的Unicode字符:
>>> unichr(97) u'a' >>> unichr(1234) u'\u04d2'
在Python 3中,您可以使用chr
而不是unichr
。
请注意,ord()本身不会给你ASCII值。 它给出了字符的数字值,因为它使用的是任何编码。因此,如果您使用Latin-1,ord('ä')的结果可能是228,或者如果您使用UTF- 8。 它甚至可以返回Unicode代码点,而不是传递一个Unicode:
>>> ord(u'あ') 12354
您正在寻找:
ord()
被接受的答案是正确的,但是如果你需要把一大堆的ASCII字符一次转换成ASCII码的话,有一个更聪明的方法可以做到这一点。 而不是做:
for ch in mystr: code = ord(cd)
或稍快:
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'):
编码作为通过序号本地迭代的types意味着转换速度更快; 在Py2.7和Py3.5的本地testing中,迭代str
以使用map(ord, mystr)
获取ASCII码的开始时间比使用bytearray(mystr)
上的bytearray(mystr)
或mystr.encode('ascii')
大约两倍于len
10 str
在Py3上mystr.encode('ascii')
,随着str
变长,支付map(ord, mystr)
的乘数上升到map(ord, mystr)
-7x。
唯一的缺点是转换是一次完成的,所以你的第一个结果可能要花费一点时间,而一个真正巨大的str
会有一个比例很大的临时bytes
/ bytes
bytearray
,但除非这迫使你进入页面抖动,这不是可能很重要。