【Python】【廖雪峰笔记】【常用内建模块】

# 【【常用内建模块】】 # 【strut】 bytes 和其他二进制数据类型的转换 # pack()把任意数据类型转成bytes import struct print (struct.pack('>I',10240099)) #b'\x00\x9c@c' ''' 【解析】 第一个参数是处理指令,'>I'的意思是:>表示字节顺序big-endian,也就是网络序,I表示4字节无符号整数。 后面的参数个数要和处理指令一致 ''' #unpack()把bytes转成相应的数据类型 print (struct.unpack('>IH',b'\xf0\xf0\xf0\xf0\x80\x80')) #(4042322160, 32896) ''' 【解析】 后面bytes依次变为I:4字节无符号郑虎 H:2字节无符号整数 所以,尽管python不适合编写底层操作字节流的代码,但在对性能要求不高的地方,利用struts就方便多了 ''' # 例子 windowsde .bmp 位图文件是一种非常简单的文件格式,我们来用struts分析一下 with open ('1.bmp','rb') as f: print (f.read()) #b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02%\x00\x00\x01c\x08\x06\x00\x00\x00\xe2\x84{\x07\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00\tpHYs\x00\x00\x0e\xc3\x00\x00 #print (struct.unpack('>ccIIIIIIHH',b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02%\x00\x00\x01c\x08\x06\x00\x00\x00\xe2\x84{\x07\x00\x00\x00\x01sRGB\x00\xae\xce')) #struct.error: unpack requires a buffer of 30 bytes 这里我也不知道怎么能算30个了 只能用老师的例子了 s = b'\x42\x4d\x38\x8c\x0a\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x80\x02\x00\x00\x68\x01\x00\x00\x01\x00\x18\x00' print (struct.unpack('>ccIIIIIIHH',s)) #(b'B', b'M', 948701696, 0, 905969664, 671088640, 2147614720, 1744896000, 256, 6144) ''' BMP格式采用小端方式存储数据,文件头的结构按顺序如下: 两个字节:'BM'表示Windows位图,'BA'表示OS/2位图; 一个4字节整数:表示位图大小; 一个4字节整数:保留位,始终为0; 一个4字节整数:实际图像的偏移量; 一个4字节整数:Header的字节数; 一个4字节整数:图像宽度; 一个4字节整数:图像高度; 一个2字节整数:始终为1; 一个2字节整数:颜色数。 所以,组合起来用unpack读取: >>> struct.unpack('

猜你喜欢

转载自www.cnblogs.com/suren2017/p/9373528.html