You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python替换字节文件中的十六进制值?问题求助

解决字节文件十六进制内容替换失效问题

你的代码失效的核心原因是错误地将十六进制字符串按UTF-8编码转换为字节,而不是将十六进制解析为对应的二进制字节。例如,你输入"04"时,代码会生成b'04'(两个ASCII字节),但文件中实际存储的是单个二进制字节0x04,两者完全不匹配,自然无法完成替换。

修正方案

需要先将空格分隔的十六进制字符串解析为二进制字节序列,再执行替换。以下是适配你具体需求的修正代码:

直接针对你的修改需求的代码

def hex_to_bytes(hex_str):
    # 去除空格后按十六进制规则转换为字节
    hex_clean = hex_str.replace(" ", "")
    return bytes.fromhex(hex_clean)

# 定义需要替换的两组十六进制内容
targets = [
    ("04", "05"),
    ("00 00 00 00", "01 00 00 00")
]

# 读取文件内容
with open('hero.bytes', 'rb') as f:
    data = f.read()

# 依次执行替换
for ori_hex, mod_hex in targets:
    ori_bytes = hex_to_bytes(ori_hex)
    mod_bytes = hex_to_bytes(mod_hex)
    data = data.replace(ori_bytes, mod_bytes)

# 写回修改后的内容
with open('hero.bytes', 'wb') as f:
    f.write(data)

支持用户交互输入的通用版本

如果你需要保留输入交互功能,可以使用以下代码:

def hex_to_bytes(hex_str):
    hex_clean = hex_str.replace(" ", "")
    return bytes.fromhex(hex_clean)

ori = input("输入要替换的十六进制内容(空格分隔):")
mod = input("输入替换后的十六进制内容(空格分隔):")

ori_bytes = hex_to_bytes(ori)
mod_bytes = hex_to_bytes(mod)

with open('hero.bytes', 'rb') as f:
    data = f.read()

data = data.replace(ori_bytes, mod_bytes)

with open('hero.bytes', 'wb') as f:
    f.write(data)

使用说明:

  • 输入十六进制内容时保持空格分隔格式(比如输入00 00 00 00匹配你要修改的那段),代码会自动转换为正确的二进制字节。
  • 针对你的需求,运行通用版代码时,可分两次执行:第一次输入04替换为05,第二次输入00 00 00 00替换为01 00 00 00。

内容的提问来源于stack exchange,提问作者Khánh Đàm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:01:01