struct
将字节打包为二进制数据。
struct模块负责Python bytes对象在Python Value及C struct之间的转换。可以处理文件二进制数据、网络连接数据流或是其他源数据。它使用 Format Strings作为C结构布局的简洁描述以及与Python值的预期转换。
字节顺序,大小和对齐方式
第一个Format String可用于打包数据的字节顺序、大小和对齐。
Character | Byte order | Size | Alignment |
---|---|---|---|
@ |
native | native | native |
= |
native | standard | none |
< |
little-endian | standard | none |
> |
big-endian | standard | none |
! |
network (= big-endian) | standard | none |
如果第一个字节不在上述字符中,*@*被默认。
本机字节顺序是big-endian或little-endian,具体取决于主机系统,可使用sys.byteorder查看系统的字节序。
'@'
和'='
:都使用本地字节顺序,但后者的大小和排列是标准化的。- 无法指示非本机字节顺序(强制字节交换); 使用适当的选择
'<'
或'>'
- ! 网络字节顺序(大端)
注意:
-
小端字节序:低字节存于内存低地址;高字节存于内存高地址;
在小端系统中,long型数据0x12345678
地址 数据 0x00000100 0x78 0x00000101 0x56 0x00000102 0x34 0x00000103 0x12 内存的地址是由低到高的顺序,而数据的字节也是由低到高的。
-
大端字节序:高字节存于内存低地址;低字节存于内存高地址。
-
在大端系统中,long型数据0x12345678
地址 数据 0x00000100 0x12 0x00000101 0x34 0x00000102 0x56 0x00000103 0x78 内存的地址是由低到高的顺序,而数据的字节却是由高到低的。
提供的函数
-
struct.pack(fmt,v1, v2, …)
根据格式化字符打包值v1,v2,…,并返回字节对象。参数必须与格式所需的值完全匹配。
-
struct.unpack(fmt, buffer)
根据格式化字符将字节对象解包。返回一个元组。
-
struct.iter_unpack(fmt,buffer)
根据格式化字符将字节对象解包。返回一个迭代器。
-
struct.pack_into()
-
struct.unpack_from()
-
struct.calcsize(fmt)
返回格式化字符对应结构的大小。