Python 处理字节序列
这段时间接触了之前没有遇到过的字节序列问题,发现这块坑特别多,在此做出小结以便复习。
1. ASCII
1.1 认识ASCII表

更详细内容可以点击:认识ASCII表
1.2 查看ASCII码符号:chr()
用法格式:chr(任意进制的数字),其参数的十进制范围是0~255的整数,结果返回一个对应的字符。(chr即为字符character的缩写)
- 查看二进制对应的ASCII编码符号:
chr(32),结果为' '(空格) - 查看八进制对应的ASCII编码符号:
chr(0o67),结果为7 - 查看十六进制对应的ASCII编码符号:
chr(0x24),结果为$
2. 理解进制
2.1 何为进制:n进制 = 低位由n个数字组成,且逢n进位
根据上面的ASCII表:
- 观察十进制:
最低位:由0、1、2、...、9这10个数字组成,且每10进1位 - 观察八进制:
最低位由0、1、...、8这8个数字组成,且每8进1位 - 观察十六进制:
最低位由0、1、2、...、9、...、D、E、F,这16个数字(后6个用字母A-F组成)组成,每16进1位 - 再观察没那么明显的二进制,其实也是同理!
最低位由0和1这2个数字表示,且每2进1位。
2.2 何为“位”:1位 = 一个占位(可以用0或1表示)(简单理解)
比如:
- 八位二进制:
'0b11111111'(表示255,0b是二进制的标识) - 两位十六进制:
'0x20'(表示32,0x是十六进制的标识)
进一步理解:
- n位二进制数能表示的范围区间是:0~2n-1,比如八位二进制数能表示
0b00000000~0b11111111,即0~255的大小(共28=256个数字) - n位十六进制数能表示的范围区间是:0~16n-1,比如二位十六进制数能表示
0x00~0xff,即0~255的的大小(共162=256个数字) - 推广: n位m进制数能表示的范围区间是:0 ~(mn-1-1),注意,减1!因此可以总结出
-
1 位二进制最多表示 1;2 位二进制数最多表示3;3 位二进制数最多表示7;4 位二进制数最多表示15;而8位二进制数最多表示255;
-
1 位十六进制最多表示15;2 位十六进制数最多表示255,所以十六进制更高效啊 !
-
因此这里可以得出一个结论:2位十六进制 = 8位二进制 = 1 byte (最多占用的内存大小)
一个字节存储8位无符号数,储存的数值范围为0-255。

-
2.3 进制(计算的)本质:取相应权重再累加
或者说如理解不同进制下、不同位所表示的(十进制)大小?
比如:
- 二进制换算:
0b0111= 0*23 + 1*22 + 1*21 + 1*20 = 19 - 十六进制换算:
0x1f= 1*161 + f*160 = 31(注意f代表15而不是16)
3. 进制转换
3.1 转为十进制:int()
其使用格式为:int(n进制数字字符串, n),注意int()的第一个参数为数字的字符串形式!
- 十六进制转为十进制:
int('0x20', 16),结果:2*161=32 - 二进制转为十进制:
int('10001000', 2),结果:1*27+ 1*23 = 128+8=136 - 八进制转十二进制:
int('32', 8),结果:3*81+2*80=26
3.2 转为二进制:bin()
其使用格式为:bin(十进制数字)
- 十进制转二进制:
bin(8)结果为'0b1000' - 十六进制转二进制:
bin(int('0x88', 16))结果为'0b10001000' - 八进制转二进制:
bin(int('0o32', 8))结果为'0b11010'
3.3 转为十六进制:hex()
其使用格式为:hex(十进制数字),即hex()接受**(十进制)整型**作为其参数,所以有必要必须要做一下转换。
- 十进制转十六进制:
hex(32),结果为'0x20' - 二进制转十六进制:
hex(int('10001000', 2)),结果为'0x88' - 八进制转十六进制:
hex(int('32', 8)),结果为'0x1a'
3.4 转为八进制:oct()
其使用格式为:oct(任意进制的数字),注意oct()的参数为数字,而不是字符串。
- 二进制转八进制:
oct(0b1010),结果为'0o12' - 十进制转八进制:
oct(40),结果为'0o50' - 十六进制转八进制:
oct(0x88),结果为'0o210'
3.5 小结
- 重要:只有十进制是整型(int),其它进制都是字符串型(str)
因此int()函数的参数必须是str类型 - 注意各种进制数字的表示:二进制的输入前面加
0b,同理十六进制数字前面加0x。也可以观察到,八进制的Python显示为0o开头。

&spm=1001.2101.3001.5002&articleId=112170605&d=1&t=3&u=618593c5ee9a48cdafccebb47ac4255f)
1172

被折叠的 条评论
为什么被折叠?



