python中用struct打包

Python字节流打包是指将数据按照一定的格式打包成字节流的过程。在Python中,可以使用struct模块来进行字节流的打包和解包操作。

struct模块提供了一些函数,用于将数据转换为特定的字节流格式,或者将字节流解析为特定的数据类型。常用的函数有pack()和unpack()。

pack()函数用于将数据按照指定的格式打包成字节流,格式由格式字符串指定。格式字符串由格式字符和对应的数据类型组成。例如,'i’表示整数,'f’表示浮点数,'s’表示字符串等。可以通过添加数字来指定数据类型的大小。

unpack()函数用于将字节流解析为特定的数据类型。它需要提供一个格式字符串和要解析的字节流作为参数,返回解析后的数据。

下面是一个示例,展示如何使用struct模块进行字节流的打包和解包:

Python

import struct # 打包 data = struct.pack('i', 123) # 将整数123打包成字节流 print(data) # b'{\x00\x00\x00}' # 解包 value = struct.unpack('i', data) # 将字节流解析为整数 print(value) # (123,)

如何使用struct模块进行字节流的打包和解包?

struct模块是Python中用于处理字节流的模块,它提供了一种简单而有效的方式来打包和解包数据。下面是使用struct模块进行字节流的打包和解包的基本步骤:

  1. 导入struct模块:

     

    Python

    import struct
  2. 打包数据: 使用struct模块的pack函数可以将数据打包成指定格式的字节流。pack函数的第一个参数是格式字符串,用于指定打包的数据类型和字节顺序,后面的参数是要打包的数据。

     

    Python

    packed_data = struct.pack(format_string, data1, data2, ...)
  3. 解包数据: 使用struct模块的unpack函数可以将字节流解包成指定格式的数据。unpack函数的第一个参数是格式字符串,用于指定解包的数据类型和字节顺序,第二个参数是要解包的字节流。

     

    Python

    unpacked_data = struct.unpack(format_string, packed_data)

在使用struct模块时,需要使用特定的格式字符串来指定数据类型和字节顺序。常用的格式字符包括:

  • 整数类型:‘b’(有符号字节)、‘B’(无符号字节)、‘h’(有符号短整数)、‘H’(无符号短整数)、‘i’(有符号整数)、‘I’(无符号整数)、‘l’(有符号长整数)、‘L’(无符号长整数)、‘q’(有符号长长整数)、‘Q’(无符号长长整数)等。
  • 浮点数类型:‘f’(单精度浮点数)、‘d’(双精度浮点数)等。
  • 字符串类型:‘s’(定长字符串)、‘p’(定长字符串,用于存储字节流)等。

下面是一个示例,演示了如何使用struct模块进行字节流的打包和解包:

 

Python

import struct # 打包数据 packed_data = struct.pack('i f s', 10, 3.14, b'hello') # 解包数据 unpacked_data = struct.unpack('i f s', packed_data) print(packed_data) # b'\n\x00\x00\x00\xcd\xcc\x0c@\x05\x00\x00\x00hello' print(unpacked_data) # (10, 3.140000104904175, b'hello')

自定义打包结构:

from struct import Struct

mystruct = Struct("3H?f") #意思为3个整形,1个布尔,1个浮点。

mystruct.pack(25,458,36,True,3.14)

数据类如何打包:

from dataclasses import dataclass
import struct@dataclass
class Person:name:str = Noneage:int = Nonesalary:float = Noneheight:float = Nonehobby:str = Nonep= Person(bytes("小强",encoding='utf-8'),24,5000.0,183.0,bytes("打篮球",encoding='utf-8'))#创建构造器
my_struct = struct.Struct(f'{len(p.name)}sHff{len(p.hobby)}s')data=my_struct.pack(p.name,p.age,p.salary,p.height,p.hobby)

运行结果:b'\xe5\xb0\x8f\xe5\xbc\xba\x18\x00\x00@\x9cE\x00\x007C\xe6\x89\x93\xe7\xaf\xae\xe7\x90\x83'

解包:

unpack_data=my_struct.unpack(data)
print(unpack_data)
print(unpack_data[0].decode("utf-8"))
print(unpack_data[1])
print(unpack_data[2])
print(unpack_data[3])
print(unpack_data[4].decode("utf-8"))

结果:

(b'\xe5\xb0\x8f\xe5\xbc\xba', 24, 5000.0, 183.0, b'\xe6\x89\x93\xe7\xaf\xae\xe7\x90\x83')
小强
24
5000.0
183.0
打篮球
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang图像处理实战:image/png包的应用详解

Golang图像处理实战:image/png包的应用详解 介绍基本操作读取PNG文件保存PNG文件 处理图像数据修改图像像素图像裁剪和缩放 高级功能使用 image/color 处理颜色优化PNG性能 错误处理与调试常见错误及其解决方法文件无法打开图像解码失败 使用工具和库进行调试 结语 …

测试数据整理--chatgpt 构造sql语句导出数据库数据

在测试过程中,我们有时候需要准备一些测试数据,若从系统中直接导出Excel数据,数据往往庞大且需要整合,不好整理,于是我们直接去数据库中查询一些表,数据整合后直接导出结果会更方便。 我们今天就 用 chatg…

shell 调用钉钉通知

使用场景:机器能访问互联网,运行时间任务后通知使用 钉钉建立单人群 手机操作,只能通过手机方式建立单人群 电脑端 2. 配置脚本 #!/bin/bash set -e## 上图中 access_token字段 TOKEN KEYWORDhello # 前文中设置的关键字 function call_…

【jinja2】模板渲染

HTML文件 return render_template(index.html)h1: 一级标题 变粗变大(狗头

B02、JVM调优案例

1、调优的基本问题 1.1、为什么要调优? 目的是防止出现OOM,进行JVM规划和预调优;解决程序运行中各种OOM;以及减少Full GC出现的频率,解决运行慢、卡顿问题。 1.2、调优的大方向 合理的编写代码,充分并合理…

大气的免费wordpress模板

国产的wordpress模板,更适合中国人使用习惯,更符合中国老板的审美的大气wordpress企业官网建站模板。 WordPress模板,也称为主题,是用于定义WordPress网站或博客外观和功能的预设计文件集。这些模板使用HTML、CSS和PHP代码构建&a…

鸢尾花数据集的KNN探索与乳腺癌决策树洞察

鸢尾花数据集的KNN探索与乳腺癌决策树洞察 今天博主做了这个KNN和决策树的实验。 一.数据集介绍 介绍一下数据集: 威斯康星州乳腺癌数据集: 威斯康星州乳腺癌数据集(Wisconsin Breast Cancer Dataset)是一个经典的机器学习数…

【简单介绍下Beego框架】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

探索 Nacos反序列化漏洞CNVD-2023-45001

在软件开发领域,安全漏洞是一项不容忽视的重要问题。最近,我们的安全团队发现了一个影响到我们的Nacos 2.1.0版本的反序列化漏洞,可能带来严重的安全威胁。我们已经立即采取了修复措施。本文将深入探讨这些漏洞的原理、可能造成的影响&#x…

MySQL数据库-优化慢查询

1、什么是慢查询? 慢查询就是SQL执行时间过长,严重影响用户体验的SQL查询语句。当它频繁出现时数据库的性能和稳定性都会受到威胁 慢查询是数据库性能瓶颈的常见原因,是指SQL执行时间超过阈值;可能由于复杂的连接、缺少索引、不恰…

Linux给磁盘扩容(LVM方式)

Linux给磁盘扩容(LVM方式) 最近测试性能,在本地打数据时,发现磁盘空间不足,于是想手动给/挂载点添加空间。这里介绍通过LVM方式快速给磁盘扩容。 LVM:是一种技术,方便管理磁盘。如果不用LVM,那…

XSS漏洞---类型+实战案例+防止

文章目录 目录 文章目录 一.XSS漏洞简介 二.XSS漏洞类型 三.实战案例 反射型XSS 存储型XSS 四.防护措施 一.XSS漏洞简介 XSS漏洞(Cross-Site Scripting)是一种常见的Web应用程序安全漏洞,它允许攻击者在受害者的浏览器中注入恶意脚本。当受…

【python】计算水仙花数

【python】计算水仙花数 "水仙花数"是指一个3位数,它的三个位上的数字的3次幂之和等于它本身。例如,"153"就是一个水仙花数,因为1^3 5^3 3^3 153。以下是一个Python代码示例,用于计算并打印出所有的三位数…

树和森林的遍历

一、树的先根遍历: 先根遍历:若树非空,先访问根结点,再依次对每棵子树进行先根遍历。 //树的先根遍历 void Pre0rder(TreeNode *R){if(R!NULL){visit(R); //访问根节点while(R还有下一个子树T)Pre0rder(T); …

elmentui树形表格使用Sortable拖拽展开行时拖拽bug

1、使用elemntui的el-table使用Sortable进行拖拽,如下 const el this.$el.querySelector(.el-table__body-wrapper tbody) Sortable.create(el, {onEnd: (event) > {const { oldIndex, newIndex } event//拿到更新前后的下标即可完成数据的更新} })2、但是我这…

java中将1.1、3.3、6.6、0.0、0.0等double类型数据相加得到结果精度丢失问题

在项目中需要统计各个商品的价格。出现结果丢失问题。如下 问题代码 Testvoid contextLoads4() throws Exception{double a 3.3;double b 6.6;double c 1.1;double d 0.0;ArrayList<Double> arrayList new ArrayList();arrayList.add(a);arrayList.add(b);array…

【深度学习实战(9)】三种保存和加载模型的方式

一、state_dict方式&#xff08;推荐&#xff09; torch.save(model.state_dict(), PATH)model YourModel() model.load_state_dict(torch.load(PATH)) model.eval()记住一定要使用model.eval()来固定dropout和归一化层&#xff0c;否则每次推理会生成不同的结果。 二、整个…

倾斜摄影修模软件模方(ModelFun)4.1.0下载及安装教程

文章目录 一、模方(ModelFun)4.1.0安装二、模方(ModelFun)4.1.0下载一、模方(ModelFun)4.1.0安装 订阅专栏后(获取专栏内所有文章阅读权限及软件安装包),从文末下载软件模方(ModelFun)4.1.0安装包,如下所示,并开始安装。 1.计算机需要进入测试模式 键盘WIN+R,打开运行窗…

【Tesla T4为例】GPU安装最新版本NVIDIA Driver、CUDA、cuDNN、Anaconda、Pytorch

NVIDIA Driver 进入英伟达官网下载页面 按照以上方式选择即可得到>535.113.01版本的驱动&#xff0c;可以实现多卡推理&#xff0c;小于这个版本会导致多卡训练以及推理报错 虽然最新版本为550.54.15&#xff0c;但是535版本更加稳定&#xff0c;并且pytorch目前只支持到1…

YoutobeDNN

目录 1. 挑战 2. 系统整体结构 3.召回 4. 排序 5. 训练和测试样本的处理 1. 挑战 &#xff08;1&#xff09;规模。很多现有的推荐算法在小规模上效果好&#xff0c;但Youtobe规模很大。 &#xff08;2&#xff09;新颖度。Youtobe语料库是动态的&#xff0c;每秒都会有…