打包和解包
回忆上次内容
- 怎么演化成ascii这种0101的二进制编码的呢?
回到 ASCII 码
- 于是有了电传打字机(tele-typewriter)
- 电传打字机需要统一的编码字母和数字
- 是作为一个七位电传打字机(tele-typewriter)代码
ASCII的演化(evolve)
- 美国标准协会(ASA)X3的首次会议
- ASCII标准的工作开始了
- 美国标准协会
- 现为美国国家标准协会
- American National Standards Institute
- 简称ANSI
编码来源
- 我想把所有 ASCII 字符 0-127 全都打出来
回忆show.py
for n in range(0xff):
print(chr(n),end="")
if n % 16 == 0:
print()
struct
- 首先是要获得从0到127的字节状态
- struct 是一个包(module)
- 来自于c里面常用类型的存储结构
- 这个struct怎么用呢?
pack
字节表示法
字节形态
- 把b"\x61"表示为b"a"
- 这样也就直接看到了字符
- 刚好ord("a") 就是 0x61
封包pack
遍历
import struct
for n in range(0,128):
b = struct.pack("b",n)
print(b,end=",")
遍历结果
- \r、\n、\t
- 这是啥意思?
- 怎么还能有两个字符呢?
- 不管他
换行
解包
封包再解包
import struct
for n in range(0,127):
b = struct.pack("b",n)
c = struct.unpack("b",b)[0]
print(chr(c),end="")
if n % 16 == 0:
print()
封包再解码
import struct
for n in range(0,127):
b = struct.pack("b",n)
s = b.decode("ascii")
print(s,end="")
if n % 16 == 0:
print()
- 和原来chr方法得到的结果差不多
- 但是没有看到字符0
总结
- 我们下次向黑暗森林区域进发!!
- 去准备行装吧
- 蓝桥->https://www.lanqiao.cn/teacher/3584
- github->https://github.com/overmind1980/oeasy-python-tutorial
- gitee->https://gitee.com/overmind1980/oeasypython
- 视频->https://www.bilibili.com/video/BV1CU4y1Z7gQ 作者:oeasy