如何在Python中将字符的ASCII码值作为int获取?
int
您正在寻找:
ord()
从这里:
函数#0获取int值的焦炭。如果你想玩完后转换回来数字,函数#0完成了这个技巧。
>>> ord('a')97>>> chr(97)'a'>>> chr(ord('a') + 3)'d'>>>
在Python 2中,还有unichr函数,返回序号为unichr参数的Unicode字符:
unichr
>>> unichr(97)u'a'>>> unichr(1234)u'\u04d2'
在Python 3中,您可以使用chr而不是unichr。
chr
ord()-Python 3.6.5rc1留档
ord()-Python 2.7.14留档
请注意,ord()本身不会给你ASCII值;它会给你字符的数值,无论它采用什么编码。因此,如果你使用Latin-1,ord('ä')的结果可能是228,或者如果你使用UTF-8,它可以引发TypeError。如果你传递一个Unicode,它甚至可以返回Unicode代码点:
ord('ä')
TypeError
>>> 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:
bytes
str
bytearray
# If mystr is definitely str, not unicodefor code in bytearray(mystr): # If mystr could be either str or unicodefor code in bytearray(mystr, 'ascii'):
编码为按序数本机迭代的类型意味着转换速度要快得多;在Py2.7和Py3.5的本地测试中,使用map(ord, mystr)迭代str以获取其ASCII代码开始时,len 10str的时间大约是使用Py2上的bytearray(mystr)或Py3上的mystr.encode('ascii')的两倍,并且随着str变得更长,为map(ord, mystr)支付的乘数上升到~6.5x-7x。
map(ord, mystr)
len
bytearray(mystr)
mystr.encode('ascii')
唯一的缺点是转换是一次性的,所以你的第一个结果可能需要更长的时间,一个真正巨大的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]