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检查系统的字节顺序。

文章目录