发布时间:2026/6/16 16:58:22
Python struct模块与二进制数据解析
Python struct模块与二进制数据解析struct模块在Python值和C结构体之间转换字节。pack将Python值打包为字节unpack将字节解包为Python值。import struct# 打包整数42打包为大端序4字节有符号整数packed struct.pack(i, 42)print(packed) # b\x00\x00\x00*# 解包value struct.unpack(i, packed)print(value[0]) # 42格式字符指定字节序和类型。表示大端序i表示有符号int。表示小端序!表示网络字节序。字节序的含义import structvalue 0x01020304print(struct.pack(i, value)) # 大端序: b\x01\x02\x03\x04print(struct.pack( print(struct.pack(!i, value)) # 网络序(大端): b\x01\x02\x03\x04大端序高字节在低地址。小端序低字节在低地址。网络协议通常使用大端序x86使用小端序。格式字符说明import struct# 各种类型的打包print(struct.pack(b, 127)) # signed charprint(struct.pack(B, 255)) # unsigned charprint(struct.pack(h, 32767)) # shortprint(struct.pack(H, 65535)) # unsigned shortprint(struct.pack(i, 2**31-1)) # intprint(struct.pack(I, 2**32-1)) # unsigned intprint(struct.pack(q, 2**63-1)) # long longprint(struct.pack(Q, 2**64-1)) # unsigned long longprint(struct.pack(f, 3.14159)) # floatprint(struct.pack(d, 3.141592653589793)) # double格式字符大小b1, h2, i4, q8, f4, d8字节。Struct对象预编译格式字符串提升性能import struct# 预编译格式字符串my_struct struct.Struct(3i2d)print(my_struct.size) # 3*4 2*8 28字节# 使用预编译对象进行打包解包data my_struct.pack(1, 2, 3, 1.0, 2.0)values my_struct.unpack(data)# pack_into和unpack_from操作缓冲区import ctypesbuf ctypes.create_string_buffer(my_struct.size)my_struct.pack_into(buf, 0, 1, 2, 3, 1.0, 2.0)values my_struct.unpack_from(buf, 0)Struct对象预编译格式提升频繁打包解包场景的性能。变长字符串的处理import struct# 固定长度字符串name bAlicedata struct.pack(5s, name)print(struct.unpack(5s, data)) # (bAlice,)# 前导长度的字符串Pascal风格length len(name)data struct.pack(fB{length}s, length, name)# 先读长度再读字符串length data[0]name data[1:1length]struct不支持变长字段需要手动处理。解析TCP协议头import structdef parse_tcp_header(data):# TCP头固定20字节src_port, dst_port, seq, ack_seq, offset_reserved, flags, window, checksum, urg_ptr \struct.unpack(!HHIIBBHHH, data[:20])data_offset (offset_reserved 4) * 4ns (offset_reserved 3) 1cwr (flags 7) 1ece (flags 6) 1urg (flags 5) 1ack (flags 4) 1psh (flags 3) 1rst (flags 2) 1syn (flags 1) 1fin flags 1return {src_port: src_port, dst_port: dst_port, seq: seq,ack_seq: ack_seq, data_offset: data_offset,flags: {ns: ns, cwr: cwr, ece: ece, urg: urg,ack: ack, psh: psh, rst: rst, syn: syn, fin: fin},window: window, checksum: checksum, urg_ptr: urg_ptr}TCP头解析展示了位操作在协议解析中的实际应用。填充和对齐import struct# 自然对齐默认packed struct.pack(ci, bA, 0x01020304)print(packed.hex()) # 4100000001020304有3字节填充# 取消对齐packed struct.pack(ci, bA, 0x01020304)print(packed.hex()) # 4101020304无填充# 显式填充packed struct.pack(cxi, bA, 0x01020304)取消对齐使用本地对齐默认。x插入一个填充字节。二进制文件解析实战import structclass BMPHeader:staticmethoddef parse(data):header struct.unpack(2sI4HIHHI, data[:30])return {signature: header[0], # bBMfile_size: header[1], # 文件大小reserved1: header[2],reserved2: header[3],data_offset: header[4], # 像素数据偏移header_size: header[5], # BITMAPINFOHEADER大小width: header[6], # 宽度height: header[7], # 高度planes: header[8], # 颜色平面数bits_per_pixel: header[9], # 每像素位数}with open(image.bmp, rb) as f:header BMPHeader.parse(f.read(30))print(fWidth: {header[width]}, Height: {header[height]})print(fBPP: {header[bits_per_pixel]})BMP文件头的解析展示了struct在实际文件格式处理中的应用。大端序与小端序的检测import structimport sysprint(sys.byteorder) # little (x86)# 打包1检查字节序测试test struct.pack(H, 1)if test b\x01\x00:print(小端序)elif test b\x00\x01:print(大端序)struct.calcsize计算格式字符串的大小import structsizes {char: struct.calcsize(c),byte: struct.calcsize(b),short: struct.calcsize(h),int: struct.calcsize(i),long: struct.calcsize(l),long_long: struct.calcsize(q),float: struct.calcsize(f),double: struct.calcsize(d),pointer: struct.calcsize(P),}print(sizes)calcsize用于预分配缓冲区或校验格式长度。struct模块的性能基准import structimport timeitdef pack_bench():for _ in range(100000):struct.pack(3i2d, 1, 2, 3, 1.0, 2.0)def unpack_bench():data struct.pack(3i2d, 1, 2, 3, 1.0, 2.0)for _ in range(100000):struct.unpack(3i2d, data)print(fpack: {timeit.timeit(pack_bench, number10)/10:.4f}s)print(funpack: {timeit.timeit(unpack_bench, number10)/10:.4f}s)

相关新闻

3分钟搞定赛马娘DMM版:免费本地化工具终极指南
2026/6/16 16:58:22

3分钟搞定赛马娘DMM版:免费本地化工具终极指南

3分钟搞定赛马娘DMM版:免费本地化工具终极指南 【免费下载链接】umamusume-localify Localify "ウマ娘: Pretty Derby" DMM client 项目地址: https://gitcode.com/gh_mirrors/um/umamusume-localify 还在为看不懂日文界面而烦恼吗?想让…

阅读更多
外贸品牌全域传播中的AI新闻发布:大鱼营销的实践视角
2026/6/16 16:58:22

外贸品牌全域传播中的AI新闻发布:大鱼营销的实践视角

随着AI大模型逐渐融入日常信息获取场景,外贸品牌在海外传播中面临新的挑战:如何让自身内容出现在AI推荐的结果中。大鱼营销结合服务出海企业的经验,将“AI新闻发布”作为全域传播体系中的一环,形成了一套从内容生产到渠道分发、数…

阅读更多
PingFangSC字体跨平台解决方案:构建统一的中文字体架构实践
2026/6/16 16:58:22

PingFangSC字体跨平台解决方案:构建统一的中文字体架构实践

PingFangSC字体跨平台解决方案:构建统一的中文字体架构实践 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件,包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 在跨平台Web开发中,中…

阅读更多
从“复制链接→打开APP“到“一键解析“:我做了个短视频去水印工具
2026/6/16 17:58:22

从“复制链接→打开APP“到“一键解析“:我做了个短视频去水印工具

一、为什么要做这个工具? 不知道你有没有遇到过这种情况:刷抖音/快手看到一个有意思的视频,想保存下来分享给朋友,结果点分享后要么是"复制链接",要么保存的视频带个大大的水印,还有平台 logo&a…

阅读更多
Path of Building PoE2:流放之路2玩家的终极角色构建实验室
2026/6/16 17:58:22

Path of Building PoE2:流放之路2玩家的终极角色构建实验室

Path of Building PoE2:流放之路2玩家的终极角色构建实验室 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 当《流放之路2》的复杂天赋系统让无数玩家望而却步时,一个开源工具正在…

阅读更多
MapLibre GL JS第53课:用Web字体样式化标签
2026/6/16 17:58:22

MapLibre GL JS第53课:用Web字体样式化标签

&#x1f4cc; 学习目标 掌握用Web字体样式化标签的实现方法理解相关API的使用能够独立完成类似功能开发 &#x1f3af; 核心概念 将Web字体应用到样式的文本标签。 &#x1f4bb; 完 整 代 码 代码示例 <!DOCTYPE html> <html lang"en"> <head…

阅读更多
手把手教你构建企业级RAG智慧问答系统:融合MySQL关键词检索与Milvus语义检索的完整实践
2026/6/16 17:58:22

手把手教你构建企业级RAG智慧问答系统:融合MySQL关键词检索与Milvus语义检索的完整实践

手把手教你构建企业级RAG智慧问答系统&#xff1a;融合MySQL关键词检索与Milvus语义检索的完整实践本文基于传智教育EduRAG项目&#xff0c;深入剖析一个完整的RAG&#xff08;检索增强生成&#xff09;智慧问答系统的设计与实现。系统采用两级检索架构&#xff1a;第一级BM25关…

阅读更多
十、网络客户端工具curl, wget, ssh, scp, sftp, rsync
2026/6/16 17:58:22

十、网络客户端工具curl, wget, ssh, scp, sftp, rsync

目录 一、curl – 多功能网络传输工具 1.1 基本概念 1.2 常用选项与用法 1.2.1 查看网页内容 1.2.2 查看 HTTP 响应头&#xff08;不下载正文&#xff09; 1.2.3 跟随重定向 1.2.4 使用代理 1.2.5 保存网页/文件到本地 1.2.6 断点续传 1.2.7 限速下载 1.2.8 FTP 操作…

阅读更多
Python struct模块与二进制数据解析
2026/6/16 16:58:22

Python struct模块与二进制数据解析

Python struct模块与二进制数据解析struct模块在Python值和C结构体之间转换字节。pack将Python值打包为字节&#xff0c;unpack将字节解包为Python值。import struct# 打包&#xff1a;整数42打包为大端序4字节有符号整数 packed struct.pack(>i, 42) print(packed) # b\x0…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/14 0:57:30

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT&#xff1a;用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域&#xff0c;文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/14 0:57:30

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述&#xff1a;这不是“写提示词”&#xff0c;而是重构人机协作的底层逻辑“Prompt Engineering”这个词&#xff0c;这两年被讲得太多&#xff0c;也太轻飘。很多人把它理解成“给AI发指令的技巧”&#xff0c;甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/16 0:39:53

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述&#xff1a;这不是一次普通更新&#xff0c;而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来&#xff0c;我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊&#xff0c;而是因为熟悉&…

阅读更多
2026 AI简历编辑平台深度测评与使用教程:ATS扫描、JD匹配、多版本投递怎么选?(首推 OfferGoose)
2026/6/16 0:57:58

2026 AI简历编辑平台深度测评与使用教程:ATS扫描、JD匹配、多版本投递怎么选?(首推 OfferGoose)

&#xff08;先给结论&#xff0c;节省时间&#xff09; 只想最快把简历“拉到及格线更贴JD”&#xff1a;优先从 鹅来面 开始——先做简历评分与岗位匹配度&#xff0c;再按建议改一版可投递稿。投递量很大、需要职位管理&#xff1a;偏向 Teal&#xff08;职位追踪 多份简历…

阅读更多
Java毕业设计-面向学生竞赛的团队组建与信息管控系统设计 SpringBoot 架构下高校竞赛团队管理系统的设计与实践(源码+LW+部署文档+全bao+远程调试+代码讲解等)
2026/6/16 0:57:58

Java毕业设计-面向学生竞赛的团队组建与信息管控系统设计 SpringBoot 架构下高校竞赛团队管理系统的设计与实践(源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

阅读更多
Windows内存清理终极指南:Mem Reduct让你的电脑告别卡顿的简单方法
2026/6/16 0:57:58

Windows内存清理终极指南:Mem Reduct让你的电脑告别卡顿的简单方法

Windows内存清理终极指南&#xff1a;Mem Reduct让你的电脑告别卡顿的简单方法 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memre…

阅读更多
GIT修改用户名
2026/6/16 5:55:51

GIT修改用户名

在GIT中修改用户名可按以下步骤操作&#xff1a; 查看当前git的用户名&#xff0c;使用命令git config --list或git config user.name。修改git用户名&#xff0c;使用命令git config --global user.name "xxx&#xff08;新的用户名&#xff09;"&#xff0c;将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/16 16:55:24

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat&#xff1a;让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/15 21:13:35

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析&#xff1a;m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多