Python解析二进制数据全攻略

Python解析二进制数据全攻略

作者:天使游戏网 / 发布时间:2026-01-31 12:40:55 / 阅读数量:0

上周调试网络协议时,我突然发现同事传过来的数据包像天书——原来他直接发了原始二进制流。这让我想起刚入行时面对十六进制数字的手足无措。今天就让我们用Python这把瑞士军刀,切开二进制数据的神秘外壳。

一、认识二进制世界的基石

记得第一次用记事本打开JPG图片时,满屏乱码让我以为电脑中了病毒。其实计算机存储的01序列,就像乐高积木般充满可能性。

1.1 字节与字符串的量子纠缠

  • bytes:不可变的字节序列,适合存储原始数据
  • bytearray:可变的亲兄弟,适合动态修改
  • 内存视图:像X光一样透视数据底层

试试在控制台输入:

Python解析二进制数据全攻略

b'\\x68\\x65\\x6c\\x6c\\x6f'.decode('utf-8')

你会看到熟悉的"hello"蹦出来,这就是字节与字符的魔法转换。

1.2 常用工具库对比

模块适用场景性能
struct处理C结构体★★★★☆
array数值型批量处理★★★☆☆
bitstring位级操作★★☆☆☆

二、文件操作的两种面孔

上周我误删了服务器日志,幸亏有二进制备份。让我们看看Python如何驾驭这两种模式:

2.1 文本模式下的陷阱

  • 自动处理换行符转换
  • 遇到0x1A(Ctrl+Z)会提前终止读取
  • 处理JPEG等二进制文件必定出错

2.2 二进制模式实战

with open('photo.jpg', 'rb') as f:header = f.read(4)if header == b'\\xff\\xd8\\xff\\xe0':print("这是标准的JPEG文件")

这样的文件头检查,比文件扩展名可靠得多。

三、结构体处理:与C语言的无缝对接

记得第一次解析TCP头部的痛苦吗?struct模块就是为此而生。

3.1 格式字符串速记表

符号类型字节数
B无符号字节1
Hunsigned short2
Iunsigned int4
Qunsigned long long8

解析IPv4数据包示例:

import structpacket = b'\\x45\\x00\\x00\\x3c\\x00\\x00\\x40\\x00\\x40...'version_ihl = packetversion = version_ihl >> 4ihl = version_ihl & 0x0Ftotal_length, = struct.unpack_from('!H', packet, 2)

四、加密解密:数据的安全铠甲

上个月公司数据泄露事件让我意识到,加密不是可选项而是必选项。

4.1 哈希校验实践

import hashlibdef verify_file(path):hasher = hashlib.sha256with open(path, 'rb') as f:while chunk := f.read(4096):hasher.update(chunk)return hasher.hexdigest

4.2 AES加密实战

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modeskey = os.urandom(32)iv = os.urandom(16)cipher = Cipher(algorithms.AES(key), modes.CBC(iv))加密encryptor = cipher.encryptorct = encryptor.update(b"Secret message") + encryptor.finalize解密decryptor = cipher.decryptordecryptor.update(ct) + decryptor.finalize

五、性能优化:与内存共舞

处理10GB的日志文件时,我的旧电脑差点。这些技巧让它起死回生:

  • 使用memoryview避免数据拷贝
  • 预分配bytearray空间
  • 分块处理大文件

比如处理图像时:

def invert_colors(data):view = memoryview(data)for i in range(len(view)):view[i] = 255view[i]return view.obj

窗外天色渐暗,显示屏上的十六进制数字依然在跳动。保存好刚写完的协议解析器,咖啡杯上的水渍在键盘反光中泛着微光。二进制世界的大门已然敞开,接下来的奇妙旅程,等你亲自去探索。

相关阅读

刚接触买票的小伙伴可能会对着手机屏幕发懵,别急,咱们慢慢来。今天就用最直白的方式,手把手教你从注册账号到成功出票的全流程。一、选对购票平台先说清楚这两个渠道的区别,大家按需选择:对比项官网购票App购票操作界面电脑大屏看得清手机操作更灵活特…
烈火屠龙全阶段实战技巧解析一、职业选对了,游戏难度减半刚进游戏看到剑士、法师、游侠三个职业,千万别凭颜值瞎选。我见过太多人因为喜欢法师长袍特效,结果被近战怪追得满地图跑。1.1 职业隐藏机制实测剑士:平A第三下带破甲,打BOSS时卡好节奏能…
游戏职业选择与技巧解析
2026-01-30 13:07:42
一、咱们先来聊聊职业选择刚进游戏看到三大职业千万别犯选择困难症,每个职业都有它的脾气。就像咱们东北乱炖,看着差不多,下锅之后各有各的味儿。1.1 三大职业的隐藏属性狂战士别被名字唬住,这货其实是脆皮刺客爆发期在凌晨3-5点伤害+15%御灵使…
大家好,今天我们将深入探讨《碧蓝航线》这款游戏的强度排行问题,并解答关于不同服务器选择的问题。让我们明确,强度排行是一个参考标准,而非绝对衡量舰娘能力的准则。《碧蓝航线》强度榜的意义 仅供参考:榜单旨在帮助玩家练习和搭配队伍,不代表舰娘…
星际战甲作为一款深受玩家喜爱的科幻题材第三人称射击网游,其丰富的战甲系统和多样化的武器配置让许多新手玩家在游戏初期感到困惑。为了帮助新手玩家更好地适应游戏,本文将围绕新手战甲打造进行详细介绍,并解答星际战甲哪个战甲最强的问题。一、新手战甲推…