Skip to content

Commit 9c78944

Browse files
authored
练习内建模块之struct
1 parent 0aaa379 commit 9c78944

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

test41.py

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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)

0 commit comments

Comments
 (0)