ustruct – 打包和解包原始数据类型

简介

ustruct 模块在 Python 值和以 Python 字节对象表示的 C 结构之间执行转换。

  • 支持 size/byte 的前缀: @, <, >, !.
  • 支持的格式代码: b, B, h, H, i, I, l, L, q, Q, s, P, f, d (最后2个需要支持浮点数).

    函数

ustruct.calcsize(fmt)

返回存放某一类型数据 fmt 需要的字节数。

  1. fmt:数据类型
  2. b 字节型
  3. B 无符号字节型
  4. h 短整型
  5. H 无符号短整型
  6. i 整型
  7. I 无符号整型
  8. l 整型
  9. L 无符号整型
  10. q 长整型
  11. Q 无符号长整型
  12. f 浮点型
  13. d 双精度浮点型
  14. P 无符号型

示例:

  1. >>> print(struct.calcsize("i"))
  2. 4
  3. >>> print(struct.calcsize("B"))
  4. 1

ustruct.pack(fmt, v1, v2, …)

按照格式字符串 fmt 打包参数 v1, v2, … 。返回值是参数打包后的字节对象。

  1. fmt:同上

示例:

  1. >>> struct.pack("ii", 3, 2)
  2. b'\x03\x00\x00\x00\x02\x00\x00\x00'

ustruct.unpack(fmt, data)

从 fmt 中解包数据。返回值是解包后参数的元组。

  1. data:要解压的字节对象

示例:

  1. >>> buf = struct.pack("bb", 1, 2)
  2. >>> print(buf)
  3. b'\x01\x02'
  4. >>> print(struct.unpack("bb", buf))
  5. (1, 2)

ustruct.pack_into(fmt, buffer, offset, v1, v2, …)

按照格式字符串 fmt 压缩参数 v1, v2, … 到缓冲区 buffer,开始位置是 offset。当offset 为负数时,从缓冲区末尾开始计数。

ustruct.unpack_from(fmt, data, offset=0)

以 fmt 作为规则从 data 的 offset 位置开始解包数据,如果 offset 是负数就是从缓冲区末尾开始计算。返回值是解包后的参数元组。

  1. >>> buf = struct.pack("bb", 1, 2)
  2. >>> print(struct.unpack("bb", buf))
  3. (1, 2)
  4. >>> print(struct.unpack_from("b", buf, 1))
  5. (2,)

更多的内容可参考 ustruct


评论

原文: https://www.rt-thread.org/document/site/submodules/micropython/docs/03-Basic_Module/07-ustruct/