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对象( bytesstr的别名,按字符迭代),但它们有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 ,但除非这迫使你进入页面抖动,这不是可能很重要。