Python struct神操作!一行pack/unpack,二进制数据直接跪了
使用处理二进制(pack和用法)转载自这篇文章写的很好所以无耻的转了。。有的时候要运用处理二进制数据, 像是, 进行存取文件操作时。在这个时候, 能够借助某些模块来达成。能够用以处理c语言里的结构体。模块中最重要的三个函数是pack(), (), ()# 四号程序员依据给定的格式(fmt), 将数据进行封装从而成为字符串(实际上跟类似于c结构体的字节流是一样的)。pack(fmt, v1, v2, ...)依据给定的格式(fmt), 对字节流进行解析, 进而送还解析而出的tuple。(fmt, )# 计算给定的格式(fmt)占用多少字节的内存上述fmt中支持的格式为pad byteno valuecharof 1char(3)char(3)_Boolbool(1)short(3)short(3)int(3)int(3)long(3)long(3)long long(2), (3)long long(2), (3)floatfloat(4)float(4)charcharvoid *(5), (3)注1.q和Q只在机器支持64位操作时有意思注2.每个格式前可以有一个数字表示个数注3, s格式用以表示具备一定长度的字符串, 4s的意思是长度为4的字符串, 然而p所代表的是字符串。注4.P用来转换一个指针其长度和机器字长相关注5.最后一个可以用来表示指针类型的占4个字节要与c里的结构体开展数据交换, 得考虑到有的c或者c编译器采用了字节对齐, 一般是以4个字节作为单位的32位系统, 所以依据本地机器字节顺序进行转换, 能够借助格式里的第一个字符去改变对齐方式, 定义如下:nonebig-none( big-)none使用方法是放在fmt的第一个位置就像’’例子1结构体如下# 四号程序员凭借.recv接收到了一个处于上面的结构体方面的数据, 此数据处于字符串s里, 时下需要将它解析出来, 能够运用()函数:# 四号程序员在上面的格式字符串里头!意味着我们得运用网络字节顺序进行解析, 由于我们的数据是从网络那儿接收而来的, 在网络上进行传送之际它呈现为网络字节顺序。后续的H表明是一个short的id, 4s表示长度为4字节的字符串, 2I表示存在两个int类型的数据。在当前, 经由一个途径, 于id、tag以及count之中, 已然留存好了我们的信息, 这是已经达成的状态。同样也可以很方便的把本地数据再pack成格式# 四号程序员pack函数将id、tag、, count依照指定格式转变为结构体, 该结构体被转换为ss, ss此时已成一字符串,实际上类似仿若c结构体的字节流, 借助.send(ss)能够把此字符串进行发送出去。例子2# 四号程序员# 将a变为二进制在这个时候, bytes成为了一类字符串, 这类具有按字节特性的字符串, 其以字节形式呈现的存储内容, 与a的二进制所存储的内容是一模一样的。去实施相反的操作, 眼下存在着二进制数据bytes, 这实际上是字符串, 把它以相反的方式转化成的数据类型:# 四号程序员如果是由多个数据构成的可以这样# 四号程序员这时的那种bytes已然是二进制形态的数据了, 能够直接去写入文件, 比如说.write(bytes)。然后当我们需要时可以再读出来bytes.read()再通过.()解码成变量# 四号程序员这称作fmt, 是格式化字符串, 由数字跟字符组成, 5s意味着占5个字符的字符串, 2i表示2个整数等, 下面是能用的字符及类型, ctype表明能够与当中的类型逐一对应。注意二进制文件处理时会碰到的问题我们使用处理二进制文件时需要用如下方法# 四号程序员那么和open(,’r)的结果到底有何不同呢不同之处有两个地方首先, 当运用’r之际, 一旦遭遇’0x1A’, 便会被视作文件终结, 此即EOF。而采用’rb’的话, 便不会存有这般问题。也就是说, 要是你来进行二进制写入随后再用文本读取出, 要是其间设有’0X1A’, 那就仅仅会读取出文件的一部分。当使用’rb’之时, 会一直读取直至文件末尾。其次, 针对于字符串x等于’abc\ndef’这种情况, 我们能够借助len(x)获取到它的长度是7, 我们把它称作换行符, 实际上它是’0X0A’。在采用’w也就是文本方式去写时, 在平台上会自动地把’0X0A’转变为两个字符’0X0D’, ’0X0A’, 也就是说文件长度实际上变为8。当运用’r文本方式来读取时, 又会自动地转换为原本的换行符。要是换成’wb’二进制方式来写的话, 就会使一个字符保持不变, 读取的时候同样是按照原样读取。因此要是采用文本方式进行写入, 而以二进制方式去读取, 那就得对这多出来的一个字节予以考量了。’0X0D’又被称作回车符。在linux环境下不会发生改变。原因在于linux仅仅运用’0X0A’来表示换行。

相关新闻

Python下载安装教程来啦!新手大学牲带你入门编程

Python下载安装教程来啦!新手大学牲带你入门编程

开始先做如下声明, 身为个体的我, 并非那种拥有几十年编程经验的资深大佬, 而是如同你们一样, 才刚刚着手进入编程领域的大学生。再者, 我也不是对编程怀有特别浓厚兴趣的狂热痴迷者, 仅仅是由于这属于我们的必修课程, 所以才踏上了这条在短时间之内暂时无法瞧见终点的路途。这…

2026/7/4 11:09:14阅读更多 →
AI电商详情图生成工具开发实战与优化

AI电商详情图生成工具开发实战与优化

1. 项目背景与需求分析 作为一名长期关注AI应用落地的开发者,我最近完成了一个电商详情图生成工具的实战项目。这个想法的诞生源于身边做电商的朋友们频繁抱怨的一个痛点:商品详情图的制作既费时又费钱。 在传统电商运营中,一个商品通常需要…

2026/7/4 11:09:14阅读更多 →
PCF8591与PIC24F16KA102的I2C信号转换系统设计

PCF8591与PIC24F16KA102的I2C信号转换系统设计

1. 项目概述:PCF8591与PIC24F16KA102的协同信号转换系统 在嵌入式系统开发中,模拟信号与数字信号的相互转换是基础且关键的技术环节。PCF8591作为一款集成了ADC(模数转换器)和DAC(数模转换器)功能的芯片&am…

2026/7/4 11:09:14阅读更多 →
3步快速上手:在Windows电脑上免费使用Switch Joy-Con控制器的完整指南

3步快速上手:在Windows电脑上免费使用Switch Joy-Con控制器的完整指南

3步快速上手:在Windows电脑上免费使用Switch Joy-Con控制器的完整指南 【免费下载链接】JoyCon-Driver A vJoy feeder for the Nintendo Switch JoyCons and Pro Controller 项目地址: https://gitcode.com/gh_mirrors/jo/JoyCon-Driver 想让你的任天堂Switc…

2026/7/4 12:19:18阅读更多 →
遗传算法工程化实战:适应度设计、编码适配与早熟干预

遗传算法工程化实战:适应度设计、编码适配与早熟干预

1. 项目概述:为什么第二部分比第一部分更值得你花时间啃透 “遗传算法入门——第二部分”这个标题乍看平平无奇,像是教科书里被翻烂的章节编号,但如果你真把它当成“续集”或“补充说明”,那大概率会在实操时卡在第3步就放弃。我带…

2026/7/4 12:19:18阅读更多 →
AI教材编写如何降低查重率:方法与工具全解析

AI教材编写如何降低查重率:方法与工具全解析

1. 为什么AI教材编写需要关注查重率?教材编写与其他内容创作最大的区别在于其权威性和原创性要求。传统教材编写过程中,作者需要花费大量时间查阅文献、整理资料,但稍有不慎就可能陷入"抄袭"的灰色地带。而AI辅助编写虽然提高了效率…

2026/7/4 12:19:18阅读更多 →
工业级 C# YOLO 框架设计:采集-推理-UI 全链路解耦架构

工业级 C# YOLO 框架设计:采集-推理-UI 全链路解耦架构

摘要:在工业视觉检测项目中,将相机采集、YOLO 推理与 UI 渲染写在同一个 async void 或 Timer 回调里,是导致产线“偶发卡顿”、“丢帧”和“内存泄漏”的万恶之源。本文摒弃 Demo 级写法,提出一套基于 .NET 8/9 的全链路解耦架构…

2026/7/4 12:19:18阅读更多 →
Spring Boot与MySQL构建高效后端接口全流程指南

Spring Boot与MySQL构建高效后端接口全流程指南

1. 项目概述:从零开始构建后端接口作为一名长期奋战在一线的开发者,我深知后端接口开发的重要性。接口作为前后端交互的桥梁,其质量直接影响整个系统的稳定性和扩展性。本文将带你从零开始,使用IntelliJ IDEA和MySQL构建完整的后端…

2026/7/4 12:19:18阅读更多 →
机器学习模型服务化:稳定性、可观测性与弹性伸缩实战

机器学习模型服务化:稳定性、可观测性与弹性伸缩实战

1. 项目概述:当模型走出Jupyter,真正开始呼吸真实世界空气 “From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题本身就像一句暗号,专为那些在Jupyter里调通了模型、画出了漂亮ROC曲线、却在部署时被生产环境…

2026/7/4 12:14:18阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/3 14:18:39阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/3 14:38:35阅读更多 →
端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

1. 项目概述:当算法工程师走进GTC26展厅,看到的不是芯片,而是“端到端”的呼吸节奏“端到端”这三个字,在GTC’26现场出现的频率,高得像NVLink带宽测试时的峰值曲线——它不再是一个论文里的技术路径选项,而…

2026/7/4 0:02:48阅读更多 →
缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考牙齿缺失是中老年人群中较为常见的口腔问题,不仅会造成咀嚼不便、进食受影响,长期还可能对营养摄入与日常社交带来困扰。义齿是改善缺牙问题的常用方式,目前市面上的义齿种类较多,…

2026/7/4 0:02:48阅读更多 →
STM32F091RC与LTC6904实现高精度方波信号生成

STM32F091RC与LTC6904实现高精度方波信号生成

1. 项目概述:LTC6904与STM32F091RC的精准方波生成方案在嵌入式系统开发中,精确的时钟信号和定时控制往往是项目成败的关键。LTC6904作为一款低功耗、高精度的可编程振荡器芯片,与STM32F091RC这款ARM Cortex-M0内核微控制器的组合,…

2026/7/4 0:02:48阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/4 1:16:56阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/4 2:33:55阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/4 2:33:55阅读更多 →