Python-struct


struct——将字节解释为被打包的二进制数据
  此模块在Python 值和表示为 Python 字节对象的 C 结构之间进行转换。
  一些struct函数(struct方法)使用缓冲区参数

函数与异常

  本模块定义了以下几个函数与异常:
exception struct.error
在各种场合提出异常; 参数是一个描述错误的字符串。

struct.pack(format, v1, v2, …)
返回一个字节对象,其中包含根据格式字符串格式打包的值 v1、v2…参数必须与格式要求的值完全匹配。

struct.pack_into(format, buffer, offset, v1, v2, …)
根据格式字符串格式将值 v1、v2… 打包,并将打包后的字节写入可写缓冲区缓冲区,从位置 offset 开始。 请注意,偏移量是必需的参数。

struct.unpack(format, buffer)
根据格式字符串格式从缓冲缓冲区中解包。 结果是一个元组,即使它只包含一个项目。 缓冲区的字节大小必须与格式所需的大小相匹配,如 calcsize() 所反映的。

struct.unpack_from(format, /, buffer, offset=0)
根据格式字符串格式,从偏移位置开始从缓冲区解包。 结果是一个元组,即使它只包含一个项目。 从位置偏移开始的缓冲区大小(以字节为单位)必须至少是格式所需的大小,如 calcsize() 所反映的。

struct.iter_unpack(format, buffer)
根据格式字符串格式从缓冲区中迭代解包。 这个函数返回一个迭代器,它将从缓冲区中读取相同大小的块,直到它的所有内容都被消耗完。 缓冲区的字节大小必须是格式所需大小的倍数,如 calcsize() 所反映的。

每次迭代都会产生一个由格式字符串指定的元组。

3.4 版中的新功能。

struct.calcsize(format)
返回与格式字符串格式相对应的结构的大小(以及 pack(format, …) 生成的字节对象的大小)。

格式化字符串

  格式字符串是用于在打包和解包数据时指定预期布局的机制。它们是从Format Characters构建的,它指定了被打包/解包的数据类型。此外,还有用于控制字节顺序、大小和对齐的特殊字符。

字节顺序、大小和对齐

  格式字符串的第一个字符可用于指示打包数据的字节顺序、大小和对齐方式,如下:
格式字符串的第一个字符可用于指示打包数据的字节顺序、大小和对齐方式

格式化字符

  格式字符具有以下含义;考虑到它们的类型,C 和 Python 值之间的转换应该是显而易见的。“标准大小”列是指使用标准大小时打包值的大小(以字节为单位);也就是说,当格式字符串以’<’、或 中的一个开头’>‘时。使用本机大小时,打包值的大小取决于平台。’!’’=’
格式化字符
在 3.3 版更改:添加了对’n’和’N’格式的支持。
在 3.6 版更改:添加了对’e’格式的支持。

note:

(1) '?'转换代码对应于C99 定义的_Bool类型。如果此类型不可用,则使用char进行模拟。在标准模式下,它总是用一个字节表示。

(2) 尝试使用任何整数转换代码打包非整数时,如果非整数有__index__()方法,则调用该方法以在打包前将参数转换为整数。
在 3.2 版更改:添加了__index__()对非整数方法的使用。

(3) 和转换代码仅适用于本机大小(选择为默认值或使用’n’字节顺序字符)。对于标准大小,您可以使用适合您的应用程序的任何其他整数格式。‘N’’@’

(4) 对于’f’、'd’和’e’转换代码,打包表示使用 IEEE 754 binary32、binary64 或 binary16 格式(分别用于 ‘f’或’d’)‘e’,而不管平台使用的浮点格式如何。

(5) ‘P’格式字符仅可用于本机字节顺序(选择为默认值或使用字节’@‘顺序字符)。字节顺序字符’='根据主机系统选择使用小端或大端排序。struct 模块不会将此解释为原生排序,因此该’P’格式不可用。

(6) IEEE 754 binary16“半精度”类型是在IEEE 754 标准的 2008 年修订版中引入的。它有一个符号位、一个 5 位指数和 11 位精度(显式存储 10 位),并且可以表示近似精度6.1e-05和6.5e+04 全精度之间的数字。C 编译器不广泛支持这种类型:在典型的机器上,无符号的 short 可用于存储,但不能用于数学运算。

  格式字符前面可以有一个整数重复计数。例如,格式字符串’4h’的含义与’hhhh’.

  格式之间的空白字符被忽略;计数及其格式不能包含空格。

  对于’s’格式字符,计数被解释为字节的长度,而不是像其他格式字符那样的重复计数;例如, '10s’表示单个 10 字节字符串,而’10c’表示 10 个字符。如果未给出计数,则默认为 1。对于打包,字符串将被截断或用空字节填充以使其适合。对于解包,生成的字节对象始终具有完全指定的字节数。作为一种特殊情况,'0s’表示单个空字符串(同时 '0c’表示 0 个字符)。

  x当使用其中一种整数格式(‘b’, ‘B’, ‘h’, ‘H’, ‘i’, ‘I’, ‘l’, ‘L’, ‘q’, )打包值时’Q’,如果x超出该格式的有效范围,则struct.error引发。

  在 3.1 版更改:以前,一些整数格式包装了超出范围的值并引发DeprecationWarning了struct.error.

  格式字符对’p’“Pascal 字符串”进行编码,这意味着存储在固定字节数中的短可变长度字符串,由计数给出。存储的第一个字节是字符串的长度,或 255,以较小者为准。字符串的字节如下。如果传入的字符串 pack()太长(长于 count 减 1),则只 count-1存储字符串的前导字节。如果字符串短于 count-1,则用空字节填充它,以便使用精确计数的字节。请注意,对于unpack(),'p’格式字符会消耗 count字节,但返回的字符串不能包含超过 255 个字节。

  对于’?'格式字符,返回值为True或 False。打包时使用参数对象的真值。本机或标准布尔表示中的 0 或 1 将被打包,并且任何非零值将True在解包时。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值