Python使用struct库的用法小结

作者:serfend 时间:2023-04-29 18:42:53 

struct简介

看到struct这么英文单词,大家应该并不陌生,因为c/c++中就有struct,在那里struct叫做结构体。在Python中也使用struct,这充分说明了这个struct应该和c/c++中的struct有很深的渊源。Python正是使用struct模块执行Python值和C结构体之间的转换,从而形成Python字节对象。它使用格式字符串作为底层C结构体的紧凑描述,进而根据这个格式字符串转换成Python值。

准确地讲,Python没有专门处理字节的数据类型。但由于b'str'可以表示字节,所以,字节数组=二进制str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。

故提供一个库来做转换。

常用函数

struct.pack(format:str, v1, v2, …)

按format的格式打包v1、v2等参数

import struct
result = [1,2,3,4,5]
print([struct.pack('<B', x) for x in result])
# [b'\x01', b'\x02', b'\x03', b'\x04', b'\x05']

struct.unpack(format:str,buffer:bytes)

按format的格式解包buffer数据,注意结果是一个数组

import struct
result = bytes.fromhex('10002030000000')
print(struct.unpack('<BHI', result))
# (16, 8192, 48)

上代码是按小端序列进行解析的

10被解析成了16

0020被解析成了 0x00 + 0x20 * 256 = 32*256 = 8192

30000000被解析成了 0x30 + 0x0 * 256 + 0x0 * 16&sup3; + 0x0 * 256&sup2; = 48

struct.calcsize(format:str)

按format的格式计算这个格式本应该的大小

import struct
print(struct.calcsize('<BHI')) # 7

B是1个字节,H是2个字节,I是4个字节,共7个字节

format参数的用法

数据

FormatC TypePython字节数
xpad byteNone1
ccharint1
bsigned charint1
Bunsigned charint1
?Boolbool1
hshortint2
Hunsigned shortint2
iintint4
Iunsigned intint4
llongint4
Lunsigned longint4
qlong longint8
Qunsigned long longint8
ffloatfloat4
ddoublefloat8
schar[]bytes1
pchar[]bytes1
Pvoid *int0

描述符

CharacterByte orderSizealignment
@nativenative凑足4个字节
=nativestandard不作变化
<little-endianstandard不作变化
>big-endianstandard不作变化
!network (= big-endian)standard不作变化

来源:https://blog.csdn.net/m0_37157335/article/details/124656198

标签:Python,struct,库
0
投稿

猜你喜欢

  • tensorflow实现将ckpt转pb文件的方法

    2023-03-24 19:05:05
  • 基于Python的接口自动化读写excel文件的方法

    2023-09-04 00:25:10
  • django model object序列化实例

    2022-07-03 14:55:24
  • Python CSV 文件解析和生成方法示例

    2022-12-25 10:52:58
  • python实现计算器功能

    2021-02-06 09:45:23
  • Python利用openpyxl库遍历Sheet的实例

    2023-10-20 20:19:01
  • 解决vue-cli + webpack 新建项目出错的问题

    2024-04-29 13:10:56
  • VS2019连接mysql8.0数据库的教程图文详解

    2024-01-13 12:54:26
  • php自定义函数实现二维数组按指定key排序的方法

    2023-06-27 09:54:36
  • python flask安装和命令详解

    2022-07-25 10:42:10
  • Linux下编译安装Mysql 5.5的简单步骤

    2024-01-27 13:33:03
  • python的setattr函数实例用法

    2023-08-17 18:49:59
  • 小 200 行 Python 代码制作一个换脸程序

    2021-02-12 09:47:52
  • 使用python实现正则匹配检索远端FTP目录下的文件

    2022-03-27 07:29:15
  • Nginx+Uwsgi+Django 项目部署到服务器的思路详解

    2021-05-20 20:23:10
  • 简单了解Django ORM常用字段类型及参数配置

    2022-11-03 09:11:38
  • SQL Server中导入导出数据的三种方式

    2008-11-28 15:53:00
  • ubuntu kylin 14.10下多个mysql 5.7.14安装教程

    2024-01-24 12:50:13
  • 微信JSSDK调用微信扫一扫功能的方法

    2024-04-29 13:46:02
  • Python捕捉和模拟鼠标事件的方法

    2022-02-14 11:17:24
  • asp之家 网络编程 m.aspxhome.com