python struct模块
官方介绍链接:https://docs.python.org/3/library/struct.html#struct.unpack_from
参考链接:https://blog.csdn.net/qq_30638831/article/details/80421019
用途:
此模块在Python值和表示为Python字节对象的C结构之间执行转换。
除其他来源外,它可用于处理存储在文件中或来自网络连接的二进制数据。
它使用格式字符串作为C结构布局以及与Python值之间的预期转换的紧凑描述。
1 按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时,不能传输int,此时先将int转化为字节流,然后再发送;
2 按照指定格式将字节流转换为Python指定的数据类型;
3 处理二进制数据,如果用struct来处理文件的话,需要用’wb’,’rb’以二进制(字节流)写,读的方式来处理文件;
4 处理c语言中的结构体;
功能函数说明
函数 | 返回值 | 说明 |
---|---|---|
struct.pack(format, v1, v2, ...) | 返回一个字节对象,其中包含根据格式字符串格式打包的值v1,v2,…。参数必须与格式所需的值完全匹配。 | 将数值打包成字节 |
struct.pack_into(format, buffer, offset, v1, v2, ...) | 根据格式字符串格式压缩值v1,v2,…,并将压缩后的字节从位置偏移处开始写入可写缓冲区。请注意,offset是必填参数。 | 将数值打包成字节写入一个缓冲区(buffer) |
struct.unpack(format, buffer) | 根据格式字符串格式从缓冲区缓冲区解压缩(大概由pack(format,...)打包)。结果是一个元组,即使它只包含一个项目。缓冲区的大小(以字节为单位)必须与格式要求的大小匹配,如calcsize()所反映。 | 将缓冲区(buffer)的字节解包得到数值 |
struct.unpack_from(format, buffer, offset=0) | 根据格式字符串格式,从位置偏移处开始从缓冲区解压缩。结果是一个元组,即使它只包含一个项目。缓冲区的大小(以字节为单位)(从位置偏移开始)必须至少为格式要求的大小,如calcsize()所反映。 | 将缓冲区(buffer)指定位置的字节解包得到数值 |
struct.iter_unpack(format, buffer) | 根据格式字符串格式迭代地从缓冲区缓冲区中解包。该函数返回一个迭代器,该迭代器将从缓冲区读取大小相等的块,直到其所有内容都被消耗为止。缓冲区的大小(以字节为单位)必须是格式要求的大小的倍数,如calcsize()所反映。 | 感觉是适用与一个buffer中全都是一种套路的数据,然后不断按照这个套路读取直到buffer消耗完 |
struct.calcsize(format) | 返回对应于格式字符串格式的结构(以及由此pack(format,...)生成的bytes对象)的大小。 | 根据format计算出所需的大小 |
参数说明
Format Strings
格式字符串是用于在打包和拆包数据时指定预期布局的机制。
它们是由格式字符构建的,格式字符指定了要打包/解包的数据类型。
此外,还有一些特殊字符可用于控制字节顺序,大小和对齐方式。
Byte Order, Size, and Alignment
默认情况下,C类型以计算机的本机格式和字节顺序表示,并在必要时通过跳过填充字节来正确对齐(根据C编译器使用的规则)。
或者,根据下表,格式字符串的第一个字符可用于指示字节顺序,大小和打包数据的对齐方式:
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,具体取决于主机系统。
例如,Intel x86和AMD64(x86-64)是低位字节序;摩托罗拉68000和PowerPC G5是大端的; ARM和Intel Itanium具有可切换的字节序(bi-endian)。
使用sys.byteorder检查系统的字节顺序。