从一个例子开始:
>>> from struct import *
>>> pack(\'hhl\',1655, 255, 370)
b\'w\\x06\\xff\\x00r\\x01\\x00\\x00\'
>>> unpack(\'hhl\', b\'w\\x06\\xff\\x00r\\x01\\x00\\x00\')
(1655, 255, 370)
>>> calcsize(\'hhl\')
8
struct.pack(format, v1, v2, ...)
返回:一个字节对象
打包v1,v2...16进制值,默认低位在前高位在后
>>> from struct import *
>>> pack(\'hhl\',1655, 255, 370)
b\'w\\x06\\xff\\x00r\\x01\\x00\\x00\'
b\'w\\x06\\xff\\x00r\\x01\\x00\\x00\'.hex()
\'7706ff0072010000\'
16进制,2字符占1字节
如图:
struct.unpack(format, buffer)
返回:一个元组
解压一个字节对象为元组
>>> unpack(\'hhl\', b\'w\\x06\\xff\\x00r\\x01\\x00\\x00\')
(1655, 255, 370)
struct.calcsize(format)
返回:返回定义格式的字节大小
>>> calcsize(\'hhl\')
8
hhl:2+2+4 =8
完整示例
import struct
#默认低位在前,高位在后,“<”模式
b = struct.pack(\'ihb\', 255, 22, 37)
s = struct.unpack(\'ihb\',b)
print(b)
print(s)
print("*******************")
data = [255, 22, 37]
#网络结构 :“!”和“>”相同,高位在前
buffer = struct.pack(\'!ihb\', *data)
buffer_u =struct.unpack(\'!ihb\', buffer)
print(buffer)
print(buffer_u)
print("*******************")
# 压缩解压不同模式,则解压错误
buffer_s =struct.unpack(\'ihb\', buffer)
print(buffer_s)
b\'\\xff\\x00\\x16\\x00%\\x00\\x00\\x00\'
(255, 22, 37)
*******************
b\'\\x00\\xff\\x00\\x16\\x00\\x00\\x00%\'
(255, 22, 37)
*******************
(-256, 5632, 620756992)