尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Python的struct,把C语言那套二进制魔法,一把塞进你的字符串

Python的struct,把C语言那套二进制魔法,一把塞进你的字符串
📅 发布时间:2026/7/5 14:19:24

精准地来讲, 不存在专门用以处理字节的数据类型。不过因为str既是字符串, 同时又能够表示字节, 所以, 字节数组等于str。而在C语言当中, 我们能够便利地运用union来处理字节, 以及字节与int、float之间的转换。

于其中, 举例来讲, 若要将一个32位无符号整数转变为字节, 此字节实则为长度是4的str,那么你就需要借助位运算符像这样去书写:

>>> n = 10240099 >>> b1 = chr((n & 0xff000000) >> 24) >>> b2 = chr((n & 0xff0000) >> 16) >>> b3 = chr((n & 0xff00) >> 8) >>> b4 = chr(n & 0xff) >>> s = b1 + b2 + b3 + b4 >>> s '\x00\x9c@c'

非常麻烦。如果换成浮点数就无能为力了。

好在提供了一个模块来解决str和其他二进制数据类型的转换。

的pack函数把任意数据类型变成字符串:

>>> import struct >>> struct.pack('>I', 10240099) '\x00\x9c@c'

pack的第一个参数是处理指令,'>I'的意思是:

代表字节顺序为big-, 此即网络序, I意味着为4字节无符号整数句号。

后面的参数个数要和处理指令一致。

把str变成相应的数据类型:

>>> struct.unpack('>IH', '\xf0\xf0\xf0\xf0\x80\x80') (4042322160, 32896)

按照>IH的阐释, 后续的str会逐个变成, I: 呈4字节无符号整数形态, 以及H: 为2字节无符号整数样式。

故而, 哪怕不适用于去编写那种针对底层进行操作的字节流代码, 然而在那些针对性能要求并非很高的地方, 运用起来可就便利许多了。

模块定义的数据类型可以参考官方文档:

.bmp格式的位图文件, 是特别简单的一种文件格式, 我们针对它来做一番分析。

首先找一个bmp文件,没有的话用“画图”画一个。

读入前30个字节来分析:

>>> s = '\x42\x4d\x38\x8c\x0a\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x80\x02\x00\x00\x68\x01\x00\x00\x01\x00\x18\x00'

BMP格式采用小端方式存储数据,文件头的结构按顺序如下:

有两个字节, 其中'BM'代表位图, 'BA'代表OS/2位图;存在一个4字节整数, 其表示位图大小;又有一个4字节整数, 它用于保留位还始终为0;再有一个4字节整数, 它表示实际图像的偏移量;还有一个4字节整数, 是关于其字节数的;另外有一个4字节整数, 用来表示图像宽度;也有一个4字节整数, 用来表示图像高度;有一个2字节整数且始终是1;最后有一个2字节整数, 代表颜色数。

所以,组合起来用读取:

>>> struct.unpack('<ccIIIIIIHH', s) ('B', 'M', 691256, 0, 54, 40, 640, 360, 1, 24)

结果呈现出来, 'B''M'所表明的乃是位图, 位图具备这样的大小, 颜色数量是24。

相关新闻

  • MC6470与dsPIC33EP运动控制方案在工业自动化中的应用
  • 大模型微调 : LLaMA-Factory + Qwen3:4b
  • # 双曲RAG框架:从表示空间几何特性重构检索增强生成流程

最新新闻

  • RobustBench模型性能对比:Linf vs L2威胁模型结果深度分析
  • CSM命令系统探秘:如何通过指令掌控多人游戏世界
  • MACS3核心功能详解:为何它是ChIP-Seq实验的黄金标准分析工具?
  • CANN / docs - 配置精度模式
  • 从新手到高手:Banana Prompt Quicker完整使用手册(含常见问题解答)
  • Self-Parking Car Evolution:如何使用遗传算法让汽车学会自动泊车

日新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号