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

如何用Python查找指定十六进制字节并获取后续3个字节?

诊断工具字节序列的搜索与提取(Python实现)

核心思路

直接利用Python内置的bytes类型及其方法完成搜索和提取,这是最高效的方式——因为bytes的方法底层由C实现,比手动遍历快得多。

步骤实现

1. 转换输入为bytes对象

先把空格分隔的十六进制字符串转换成Python的bytes类型,这是处理二进制数据的标准类型:

# 原始十六进制序列输入
hex_input = "35 04 65 FF D0 00 10 24 D0 01 10 24 E0 20 10 2C 84 D0 05 10 24 D0 07 10 24"
# 转换为bytes对象(fromhex自动忽略空格)
byte_data = bytes.fromhex(hex_input)

# 定义要搜索的目标子序列
target_seq = bytes.fromhex("E0 20")

2. 搜索目标序列并提取后续字节

用bytes.find()方法快速定位目标序列的起始位置,再通过切片提取后续3个字节:

# 查找目标序列的起始索引,未找到返回-1
start_pos = byte_data.find(target_seq)

if start_pos != -1:
    # 计算后续字节的起始和结束位置
    extract_start = start_pos + len(target_seq)
    extract_end = extract_start + 3
    
    # 检查是否有足够的后续字节
    if extract_end <= len(byte_data):
        result_bytes = byte_data[extract_start:extract_end]
        # 转换为易读的十六进制字符串输出
        print(result_bytes.hex(" ").upper())  # 输出:10 2C 84
    else:
        print("目标序列后字节不足3个")
else:
    print("未找到目标序列")

关键知识点

  • bytes类型:Python专门用于二进制数据的类型,支持所有字符串式的序列操作(切片、查找等),操作效率极高。
  • bytes.find():内置的子序列查找方法,时间复杂度为O(n),底层C实现,比手动写循环遍历快数倍,适合处理诊断工具这类可能较长的字节序列。
  • 切片操作:bytes的切片和字符串切片逻辑一致,通过[start:end]可以快速提取子序列,非常直观。

备选方案(正则匹配)

如果需要处理更复杂的字节匹配规则,可以用re模块的二进制模式,但对于简单的固定子序列搜索,bytes.find()更简洁高效:

import re

match = re.search(target_seq, byte_data)
if match:
    start_pos = match.start()
    # 后续提取逻辑和上面一致

内容的提问来源于stack exchange,提问作者Joseph Stalin Pillai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:30:17