struct模块

Python的struct模块用于在Python值和C结构体缓冲区之间转换,处理二进制数据。它使用格式化字符串描述C结构体布局。模块提供了异常、函数和类,支持字节顺序、大小和对齐的设置,以及多种格式化字符进行数据封装和解包。通过struct.Struct类,可以提高处理效率,并提供了多个方法如pack、unpack等进行操作。
摘要由CSDN通过智能技术生成

该模块在Python值和表示为Python bytes对象的C结缓冲区构体之间进行转换。可用于处理存储在文件中或者来自网络连接,以及其它来源的二进制数据。它使用格式化字符串,作为C结构体布局的简洁描述,以及从Python值,或者到Python值的预期转换。

注意:默认情况下,封装给定的C结构体的结构包括填充字节,以便为涉及的C类型保持正确的对齐;类似地,解包时会考虑对齐。选择此行为使得被封装的结构体的字节完全对应于C结构体在内存中的布局。要处理平台无关的数据格式,或者忽略隐式的填充字节,可以使用standard大小和对齐,代替native大小和对齐,查看字节顺序,大小和对齐了解详情。

有几个struct函数(和Struct的方法)接收一个buffer参数。它引用实现了Buffer协议的对象,并提供一个可读,或可读写的缓存。用于该目的的最常见的类型是bytesbytearray,但是可以视为字节数组的许多其它类型实现了Buffer协议,因此它们可以读和填充,而不需要额外的从bytes对象复制。

1 函数和异常

该模块定义了以下异常和函数:

1.1 异常 struct.error

在各种场合下抛出异常;参数是描述错误的字符串。

1.2 struct.pack(fmt, v1, v2, ...)

根据格式化字符串fmt封装,返回一个包括v1v2等值的字节对象。参数必须与格式化所需的值完全匹配。

1.3 struct.pack_into(ftm, buffer, offset, v1, v2, ...)

根据格式化字符串fmt,封装v1v2等值,并从位置offset开始,将封装的字节写入可写缓冲区buffer中。注意,offset是必需的参数。

1.4 struct.unpack(fmt, buffer)

根据格式化字符串fmt,从缓冲区buffer(假设由pack(fmt, ...)封装)中解包。即使结果只包含一项,也是一个元组。缓冲区的大小(以字节为单位)必需与格式所需的大小匹配,比如calcsize()所得的结果。

1.5 struct.unpack_from(fmt, buffer, offset=0)

根据格式化字符串fmt,从位置offset开始解包。即使结果只包含一项,也是一个元组。缓冲区的大小(以字节为单位)减去offset,至少是格式化所需的大小,比如calcsize()所得的结果。

1.5 struct.iter_unpack(fmt, buffer)

版本3.4中新增。

根据格式化字符串fmt,从缓冲区buffer中迭代解包。该函数返回一个iterator,它将从缓冲区中读取大小相等的块,直到所有内容被耗尽。缓冲区的大小(以字节为单位)必须是格式化所需大小的倍数,比如calcsize()所得的结果。

每次迭代yield一个由格式化字符串指定的元组。

1.6 struct.calcsize(fmt)

返回对应于格式化字符串fmt的结构体(以及由pack(fmt, ...)生成的字节对象)的大小。

2 格式化字

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值