File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ #!/usr/bin/env python3
2+ # -*- conding: utf-8 -*-
3+
4+ '练习内建模块之struct'
5+
6+ __author__ = 'sergiojune'
7+ import struct ,base64
8+
9+ # 这个模块是将bytes与其他二进制数据互相转换
10+ # 将任意数据类型转为bytes
11+ i = 10249999
12+ b = struct .pack ('>I' , i ) # 第一个参数为处理指令
13+ print (b )
14+
15+ s = 123.456
16+ b = struct .pack ('f' , s )
17+ print (b )
18+
19+
20+ # 将bytes转为其他任意类型
21+ s = struct .unpack ('f' , b )
22+ print (s )
23+
24+ 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 '
25+ un = struct .unpack ('<cciiiiiihh' , s )
26+ print (un )
27+
28+
29+ # 作业:编写一个bmpinfo.py,可以检查任意文件是否是位图文件,如果是,打印出图片大小和颜色数
30+ bmp_data = base64 .b64decode ('Qk1oAgAAAAAAADYAAAAoAAAAHAAAAAoAAAABABAAAAAAADICAAASCwAAEgsAAAAAAAAAAAAA/3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9/AHwAfAB8AHwAfAB8AHwAfP9//3//fwB8AHwAfAB8/3//f/9/AHwAfAB8AHz/f/9//3//f/9//38AfAB8AHwAfAB8AHwAfAB8AHz/f/9//38AfAB8/3//f/9//3//fwB8AHz/f/9//3//f/9//3//f/9/AHwAfP9//3//f/9/AHwAfP9//3//fwB8AHz/f/9//3//f/9/AHwAfP9//3//f/9//3//f/9//38AfAB8AHwAfAB8AHwAfP9//3//f/9/AHwAfP9//3//f/9//38AfAB8/3//f/9//3//f/9//3//fwB8AHwAfAB8AHwAfAB8/3//f/9//38AfAB8/3//f/9//3//fwB8AHz/f/9//3//f/9//3//f/9/AHwAfP9//3//f/9/AHwAfP9//3//fwB8AHz/f/9/AHz/f/9/AHwAfP9//38AfP9//3//f/9/AHwAfAB8AHwAfAB8AHwAfAB8/3//f/9/AHwAfP9//38AfAB8AHwAfAB8AHwAfAB8/3//f/9//38AfAB8AHwAfAB8AHwAfAB8/3//f/9/AHwAfAB8AHz/fwB8AHwAfAB8AHwAfAB8AHz/f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//38AAA==' )
31+
32+
33+ # 判断位图文件是根据他的前30个字节来判断的
34+ def bmp_info (data ):
35+ un = struct .unpack ('<cciiiiiihh' , data [:30 ])
36+ if un :
37+ if un [0 ] == b'B' and un [1 ] == b'M' :
38+ return {'width' : un [6 ],
39+ 'height' : un [7 ],
40+ 'color' : un [9 ]}
41+ return 'not bmp'
42+
43+
44+ b = bmp_info (bmp_data )
45+ print (b )
You can’t perform that action at this time.
0 commit comments