File tree 1 file changed +45
-0
lines changed
1 file changed +45
-0
lines changed 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