为了账号安全,请及时绑定邮箱和手机立即绑定

如何获得字符的ASCII值?

如何获得字符的ASCII值?

慕村9548890 2019-07-09 16:31:59
如何获得字符的ASCII值?我怎么才能拿到ASCII字符的值作为int在……里面Python?
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

请注意ord()它不会给出ASCII值本身;它会以任何编码方式给出字符的数值。因此.的结果ord('ä')如果您使用拉丁文-1,则可以是228,或者它可以引发TypeError如果你用的是UTF-8。如果您将Unicode传递给它,它甚至可以返回Unicode代码点:

>>> ord(u'あ')12354


查看完整回答
反对 回复 2019-07-09
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

接受的答案是正确的,但如果您需要立即将大量ASCII字符转换为ASCII代码,则有一种更聪明、更有效的方法。而不是做:

for ch in mystr:
    code = ord(ch)

或者稍微快一点:

for code in map(ord, mystr):

您可以转换为直接迭代代码的Python本机类型。在Python 3上,它很简单:

for code in mystr.encode('ascii'):

在Python2.6/2.7上,它只是稍微多了一点,因为它没有Py3风格bytes对象(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的本地测试中,迭代一个str以获取其ASCII代码map(ord, mystr)开始花费大约两倍的时间len 10 str比使用bytearray(mystr)关于Py2或mystr.encode('ascii')在Py3上,并且作为str时间越长,乘数就越长map(ord, mystr)上升到6.5倍-7倍。

唯一的缺点是转换是一次性的,所以您的第一个结果可能需要更长的时间,而且非常巨大。str会有一个相当大的临时bytes/bytearray,但除非这迫使你翻页,否则这不太可能重要。


查看完整回答
反对 回复 2019-07-09
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

从…这里:

函数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()-Python3.6.5rc1文档

Ord()-Python2.7.14文档


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 1033 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信