(Python3)struct

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011978079/article/details/89359110

功能:字节数组与二进制数据的相互转换, 常用以下两个功能

官方:https://docs.python.org/2/library/struct.html#struct.error

功能一:打包

struct.pack(fmt,v1,v2,....)

功能二:解包

struct.unpack(fmt, string)

fmt由符号和字符组成

fmt符号
符号 描述
@ native
= native
< little-endian
> big-endian
! network=big-endian
fmt字符
格式 C类型 Python类型 字节数
x Pad byte no value  
c char string of length1 1
b signed char integer 1
B unsigned char integer 1
? _Bool bool 1
h short integer 2
H unsigned short integer 2
i int integer 4
I unsigned int  integer 4
l long integer 4
L unsigned long integer 4
q long long integer 8
Q unsigned long long integer 8
f float float 4
d double float 8
s char[] string  
p char[] string  
P void * integer  
       

示例:

import struct

#打包,将整数或二进制数值转换成对应格式的字节数组
print(struct.pack('hhl',1,2,3))
#输出 b'\x01\x00\x02\x00\x03\x00\x00\x00'

#解包,将字节数组转换成整数或二进制对应的数据
print(struct.unpack('hh1',b'\x01\x00\x02\x00\x03\x00\x00\x00'))
#输出 (1, 2, 3)

#计算格式化后字节数组长度
print(struct.calcsize('hhl'))
#输出 8

#末尾补2字节0
print(struct.pack('>llhxx',1,2,3))
#输出 b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'

#高级解包
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', 691256, 0, 54, 40, 640, 360, 1, 24)

猜你喜欢

转载自blog.csdn.net/u011978079/article/details/89359110