字符实战——字符串转换工具——字符码转换 | 第二部分 类型与操作 —— 第 7 章: 字符串基础 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-大发黄金版app下载
关于转换的主题,还可能将单个字符传入内置的ord
函数,将其转换为基础整数码(比如,其ascii字节值)——这返回了真正的用来在内存中代表对应字符的二进制值。chr
函数执行反向操作,将整数码转为对应的字符:
>>> ord('s')
115
>>> chr(115)
's'
技术上讲,这两个函数使得字符和它们的unicode序数或”码点“(只是它们在基础字符集中的识别号)相互转换。对于ascii文本,这是熟悉的能容纳在内存单个字节中的7比特数字,但其它种类的unicode文本的码点范围可能更宽广(关于字符集和unicode的更多知识见第37章)。如果需要可使用循环来将这些函数应用到字符串中的所有字符上。这些工具还可以用来执行一种基于字符串的数学。比如,要前进到下一个字符,转换并计算整数:
>>> s = '5'
>>> s = chr(ord(s) 1)
>>> s
'6'
>>> s = chr(ord(s) 1)
>>> s
'7'
至少对单字符的字符串,这提供了使用内置int
函数来将字符串转为整数的一种替代方法(然而这方法只在按照代码期待的顺序,对项排序的字符集中才有意义!):
>>> int('5')
5
>>> ord('5') - ord('0')
5
这些转换能和循环语句(在第4章中介绍并在本书下一部分中深度讲述)一起结合使用,来将一个二进制数字的字符串转换为它们对应的整数值。每次循环时,将当前值乘2再加上下一个数字符号的整数值:
>>> b = '1101' # 使用 ord 将二进制数字转换为整数
>>> i = 0
>>> while b != '':
... i = i * 2 (ord(b[0]) - ord('0'))
... b = b[1:]
...
>>> i
13
译注:这是一种将二进制数字转换为整数的常用方法,另一种方法是加权求和法。
往左移位的操作(i << 1
)会和这里的乘以2有相同的效果。然而,将把这个修改作为建议的练习,既因为还没有详细学习循环,还因为在第5章中碰到的int
和bin
内置函数为我们处理了二进制转换任务(从python 2.6和3.0开始):
>>> int('1101', 2) # 二进制转为整数:内置函数
13
>>> bin(13) # 整数转为二进制:内置函数
'0b1101'
假以时日,python往往会自动化最常见的任务!