我如何获得 ASCII码 一个字符的值 intPython?

有帮助吗?

解决方案

这里:

函数ord()将获得char的int值。如果您想在使用该数字后转换回去,则功能Chr()可以解决问题。

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

在Python 2中,还有 unichr 函数,返回 统一码 序数为 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值;它为你提供了它所在的任何编码的字符的数值。因此,如果你使用Latin-1, ord('ä')的结果可以是228,或者它可以如果您使用的是UTF-8,则引发 TypeError 。如果你传递一个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 的本地测试中,迭代 str 使用以下命令获取其 ASCII 代码 map(ord, mystr) 开始需要大约两倍的时间 len 10 str 比使用 bytearray(mystr) 在 Py2 或 mystr.encode('ascii') 在 Py3 上,并且作为 str 变得更长,乘数支付 map(ord, mystr) 升至~6.5x-7x。

唯一的缺点是转换是一次性完成的,所以你的第一个结果可能需要更长的时间,并且一个真正巨大的 str 会有相当大的临时 bytes/bytearray, ,但除非这迫使您进行页面抖动,否则这可能并不重要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top