学物联网,来万物简单IoT物联网!!
ustruct 介绍
ustruct提供打包和解压原始数据类型的功能。
默认情况下,C类型以机器的本机格式和字节顺序表示,并在必要时通过跳过填充字节来正确对齐(根据C编译器使用的规则)。参考下表,格式字符串的第一个字符用于指示打包数据的字节顺序,大小和对齐方式:
| 字符 | 自己额顺序 | 大小 | 对其方式 |
|---|
| @ | native | native | native |
| = | native | standard | none |
| < | little-endian | standard | none |
| > | big-endian | standard | none |
| ! | network (= big-endian) | standard | none |
格式化字符表
| 格式 | C语言的类型 | Python对应的类型 | 类型所占空间大小 |
|---|
| x | pad byte | no value | |
| c | char | bytes of length 1 | 1 |
| b | signed char | integer | 1 |
| B | unsigned char | integer | 1 |
| ? | _Bool | bool | 1 |
| h | short | integer | 2 |
| H | unsigned short | integer | 2 |
| i | int | integer | 4 |
| I | unsigned int | integer | 4 |
| l | long | integer | 4 |
| L | unsigned long | integer | 4 |
| q | long long | integer | 8 |
| Q | unsigned long long | integer | 8 |
| n | ssize_t | integer | |
| N | size_t | integer | |
| f | float | float | 4 |
| d | double | float | 8 |
| s | char[] | bytes | |
| p | char[] | bytes | |
| P | void * | integer | |
接口说明
calcsize - 返回存放 fmt 需要的字节数
- 函数原型:ustruct.calcsize(fmt)
- 参数说明:
| 参数 | 类型 | 必选参数? | 说明 |
|---|
| fmt | 格式字符 | 是 | 详情参考上文格化式字符表 |
- 返回值
返回存放fmt格式的对象需要的字节数。 - 示例:
>>> ustruct.calcsize('i') 4
>>> ustruct.calcsize('d') 8
pack - 按照格式字符串fmt压缩参数
- 函数原型:ustruct.pack(fmt, v1, v2, …)
- 参数说明:
| 参数 | 类型 | 必选参数? | 说明 |
|---|
| fmt | string | 是 | 压缩参数时所采用的格式字串,详情见上文格化式字符表 |
| v1 | - | 是 | 要压缩的对象v1 |
| v2 | - | 是 | 要压缩的对象v2 |
| … | - | 是 | 要压缩的其它对象 |
>>> ustruct.pack('iiiii', 1, 2, 3, 4, 5)
b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x 00\x00'
unpack - 根据格式化字符串fmt对数据进行解压
- 函数原型:unstrcut.unpack(fmt, data)
- 参数说明:
| 参数 | 类型 | 必选参数? | 说明 |
|---|
| fmt | string | 是 | 解压缩数据时所采用的格式字串,详情见上文格化式字符表 |
| data | bytearray | 是 | 要解压缩的对象v1 |
>>> ustruct.unpack('iiiii', b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x 00\x04\x00\x00\x00\x05\x00\x00\x00')
(1, 2, 3, 4, 5)