简单示例代码如下:
# -*- coding:utf-8 -*-
import struct
import binascii
values = (5, 6, 7)
s = struct.Struct('III')
packed_data = s.pack(*values)
unpacked_data = s.unpack(packed_data)
print('Original values:', values)
print('Format string :', s.format)
print('Uses :', s.size, 'bytes')
print('Packed Value :', binascii.hexlify(packed_data))
print('Unpacked Type :', type(unpacked_data), ' Value:', unpacked_data)
print('packed_data Type :', type(packed_data))
运行结果:
('Original values:', (5, 6, 7))
('Format string :', 'III')
('Uses :', 12, 'bytes')
('Packed Value :', '050000000600000007000000')
('Unpacked Type :', <type 'tuple'>, ' Value:', (5, 6, 7))
('packed_data Type :', <type 'str'>)
Process finished with exit code 0
分析:
元组 (5,6,7)中 5,6,7都是 int 型的
格式’III’是3个 i的大写,
‘I’ 对应 unsigned int ,每个unsigned int 类型变量占用4个字节的内存
将其(5,6,7)打包pack之后,对应的内存实际存储为:
‘050000000600000007000000’
对应:
根据该内存分布,可以对应c语言中的结构体:
struct data{
int a;
int b;
int c
};
附:
1.格式化对照表
提示:
signed char(有符号位)取值范围是 -128 到 127(有符号位)
unsigned char (无符号位)取值范围是 0 到 255
2.字节顺序,大小和校准