当前位置: 首页 > news >正文

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

精准地来讲, 不存在专门用以处理字节的数据类型。不过因为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。

http://www.jsqmd.com/news/1128668/

相关文章:

  • 收藏!2026年企业决胜关键:AI智能体(小白程序员必看)
  • 华为HarmonyOS设备上如何轻松配置microG服务框架:完整指南
  • Java事务与MySQL事务的关系及MVCC通俗解析
  • OpenBMC:服务器的带外管理
  • MC6470与dsPIC33EP运动控制方案在工业自动化中的应用
  • Claude Code那些高级功(一)
  • 30分钟掌握Codex:AI代码生成从入门到实战
  • # 双曲RAG框架:从表示空间几何特性重构检索增强生成流程
  • MAX9744与PIC18F45K40构建高效数字音频系统
  • 大模型微调 : LLaMA-Factory + Qwen3:4b
  • 个人分享|小区物业管理系统源码与配套论文,课设毕设参考素材!
  • TotalSegmentator:一站式医学图像分割的终极解决方案
  • Labelme 5.3.1 批量标注与转换:100张图片自动生成VOC/COCO格式数据集
  • 第21讲:自定义类型:联合和枚举
  • 六西格玛在AI与云原生时代的实战重构:女性技术专家的质量方法论
  • 程序员求职全链路防坑手册——培训贷、虚假高薪、外包套路、阴阳合同一次性拆解
  • 【Software Engineering】Iterative Development, make it Work, then Better
  • LeRobot + LIBERO 机器人仿真评估全流程:模型下载、环境搭建与踩坑指南
  • Mi-Create终极教程:免费打造小米手表专属表盘的完整指南
  • 系统安全核心要素——构建“铜墙铁壁“的系统
  • Zed 新特性:Git面板视图重构,像VS Code看齐了。
  • 编译原理:高级程序语言的定义
  • PyTorch 2.0 自动求导实战:3步构建动态计算图与梯度检查
  • 二极管、三极管、mos管
  • QA-GraphRAG:面向多跳推理的查询自适应即插即用检索框架
  • 为什么顶尖科技公司都在秘密使用这款开源字体系统?Inter字体深度解析
  • 会议复盘小知识:结构化导图梳理会议内容的技巧
  • 附图报价系统设计分析8
  • 202638读书笔记|《商场B1,挤满“白吃白喝”的年轻人》——白吃白喝,热闹背后并非单纯的慷慨,免费的才是最贵的
  • APK安装器:在Windows上无缝安装安卓应用的终极解决方案