Python使用struct库的用法小结
作者:serfend 发布时间:2023-04-29 18:42:53
标签:Python,struct,库
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³ + 0x0 * 256² = 48
struct.calcsize(format:str)
按format的格式计算这个格式本应该的大小
import struct
print(struct.calcsize('<BHI')) # 7
B是1个字节,H是2个字节,I是4个字节,共7个字节
format参数的用法
数据
Format | C Type | Python | 字节数 |
---|---|---|---|
x | pad byte | None | 1 |
c | char | int | 1 |
b | signed char | int | 1 |
B | unsigned char | int | 1 |
? | Bool | bool | 1 |
h | short | int | 2 |
H | unsigned short | int | 2 |
i | int | int | 4 |
I | unsigned int | int | 4 |
l | long | int | 4 |
L | unsigned long | int | 4 |
q | long long | int | 8 |
Q | unsigned long long | int | 8 |
f | float | float | 4 |
d | double | float | 8 |
s | char[] | bytes | 1 |
p | char[] | bytes | 1 |
P | void * | int | 0 |
描述符
Character | Byte order | Size | alignment |
---|---|---|---|
@ | native | native | 凑足4个字节 |
= | native | standard | 不作变化 |
< | little-endian | standard | 不作变化 |
> | big-endian | standard | 不作变化 |
! | network (= big-endian) | standard | 不作变化 |
来源:https://blog.csdn.net/m0_37157335/article/details/124656198
0
投稿
猜你喜欢
- 环境变量配置首先需要将anaconda的路径配置进环境变量中,我是用户变量和系统变量都配置了。我的anaconda安装在D:\Anacond
- 首先这是VGG的结构图,VGG11则是红色框里的结构,共分五个block,如红框中的VGG11第一个block就是一个conv3-64卷积层
- 这是一个自动化程度较高的程序,运行本程序后会从chrome中读取cookies用于登录人人影视签到,并且会自动添加一个windows 任务计
- 本文实例讲述了Python实现的将文件每一列写入列表功能。分享给大家供大家参考,具体如下:# -*- coding: utf-8 -*-#!
- 1.matplotlib简介matplotlib 库是 Python 中绘制二维和三维图表的数据可视化工具特点: &
- 几年前,看到一台湾人写的一段程序(好像是《日语基础》),在网页上实现音视频与文字的同步播放(就是音视频播到哪部分,相应的文字就亮显,点击某一
- 1、涉及到图的对比会用到子图形式展示,先看看效果2、绘制代码如下accuracy_alexnet_clef = [78.05, 78.43,
- 导语应好友邀请,帮他写了个小程序,功能类似于实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖。这样就能不
- 一、参数的定义1、函数的参数在哪里定义在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间
- 本篇文章将讨论使用 Python 中的四种不同方法来使用、管理秒并将其转换为天、小时、分钟和秒。现在,让我们开始讨论这些方法并在一些示例中使
- 将有安全问题的SQL过程删除,比较全面.一切为了安全!删除了调用shell,注册表,COM组件的破坏权限use master&nb
- 以下为引用的内容:DROP PROCEDURE test_insert ;DELIMITER ;;CREATE PROCEDURE test
- 本文实例为大家分享了opencv实现图像旋转效果的具体代码,供大家参考,具体内容如下图像旋转:在opencv中首先根据旋转角度和中心获取旋转
- 实验环境 Pytorch 1.7.0torchvision 0.8.2Python 3.8CUDA10.2 + cuDNN v7.
- 导入模块from bs4 import BeautifulSoupsoup = BeautifulSoup(html_doc,"h
- 程序设计中我们时常需要检测用户输入是否正确,特别是姓名,地址等等是不是输入的汉字。那么,如何判断一个字符是不是汉字呢?其实在asp中至少有两
- 404错误是指在服务器找不到指定的页面。404错误页面是可以自定义的。Smashing Magazine为我们挑选了40个有创意的404错误
- 1. OpenCV:模板匹配。 获得小跳棋中心位置2.
- 用python来自动生成excel数据文件。python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils和pyExc
- 准确地讲,Python没有专门处理字节的数据类型。但由于str既是字符串,又可以表示字节,所以,字节数组=str。而在C语言中,我们可以很方