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性能 错误处理与调试常见错误及其解决方法文件无法打开图像解码失败 使用工具和库进行调试 结语 …

光流法跟踪

光流法(Optical Flow)是一种计算机视觉技术,用于估计图像序列中像素点的运动,即在连续两帧或多帧图像间,由于场景中物体的运动而在像素层面产生的相对移动。在目标跟踪场景中,特别是针对关键点的跟踪&#…

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

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

shell 调用钉钉通知

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

PyTorch如何保存验证集上效果最好的模型

PyTorch如何保存验证集上效果最好的模型 验证集的作用是在训练过程中监测是否出现过拟合。通常情况下,我们期望验证集的损失函数值在训练过程中首先下降,然后趋于稳定或上升。当损失函数值达到最小值时,表示模型在验证集上的泛化能力最佳&am…

分享一些壁纸api(小鸟)

分享一些壁纸api 搜索接口 import requestsurl "https://wp.shanhutech.cn/intf/GetUpOrDownWallpaper" querystring {"type":"search","action":"","value":"原神","id":"2051093&q…

【jinja2】模板渲染

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

B02、JVM调优案例

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

采购管理软件:如何快速实现采购申请自动化流转?

在没有采购管理软件的情况下,采购申请完全依赖纸质表格、电子邮件和 excel 表等过时的工具会大大降低效率,甚至影响企业的利润。 但一些企业尚未准备好重塑人工采购申请流程。他们似乎没有意识到,在采购相关活动上花费的资金越多&#xff0c…

大气的免费wordpress模板

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

doc转html参考

参考:https://github.com/mwilliamson/mammoth.js?tabreadme-ov-file 参考:前端玩Word:Word文档解析成浏览器认识的HTML_前端解析word成html-CSDN博客

LOD1-Unity中模型LOD技术原理以及使用

在Unity中,LOD(Level of Detail)技术是一种用于优化模型渲染性能的技术。它通过在不同距离下使用不同细节级别的模型来减少渲染开销,从而提高游戏的性能。 LOD技术的原理是根据相机与模型之间的距离来选择合适的细节级别进行渲染…

python中的字典(dict)排序

前言 在Python中,字典(dict)本身是无序的,直到Python 3.7版本,字典在迭代时会保持插入顺序。如果你需要根据键(key)或值(value)对字典中的项进行排序,可以使…

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

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

【简单介绍下Beego框架】

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

高性能的 Rust 原生 UI 框架

在当今多元化的软件开发生态中,Rust作为一个旨在提供高性能与安全并存的系统编程语言,逐渐在开发者中获得了声誉。而在构建图形用户界面(GUI)时,选择合适的框架对开发效率和用户体验都至关重要。Druid是基于Rust语言的…

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

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

MySQL数据库-优化慢查询

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

hudi系列-schema evolution

在RFC-33中描述,hudi对schema evolution进行了统一设计,在官网文档中也指明了从0.11版本开始,spark-sql ddl是支持schema evolution的,而flink-sql在旧版本中并不支持ddl方式对表结构,所以full schema evolution都隐藏在读写过程中。对于使用者,我们最终只关心表的读和写…

Linux给磁盘扩容(LVM方式)

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