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

使用自定义字典匹配5个连续字符获取文件偏移量的实现问题

实现方案

核心思路

  • 先把你自定义字典允许的字符整理成字节集合,方便快速校验
  • 以二进制模式读取文件,保证偏移量计算准确
  • 用长度为5的滑动窗口遍历文件字节,每次读1个字节更新窗口,校验窗口内所有字节是否都属于允许集合
  • 匹配成功后直接用当前文件指针位置减5就能得到目标偏移量

代码实现(Python)

# 定义允许的字节集合(对应你自定义字典的0x41~0x47即A~G)
ALLOWED_BYTES = {ord(c) for c in 'ABCDEFG'}
# 目标连续匹配长度
TARGET_LEN = 5

def find_target_offset(file_path: str) -> int | None:
    with open(file_path, 'rb') as f:
        # 滑动窗口,存储最近读的5个字节
        window = []
        while True:
            # 每次读1个字节
            byte = f.read(1)
            # 读到文件末尾还没匹配到
            if not byte:
                return None
            current_byte = ord(byte)
            window.append(current_byte)
            # 窗口长度超过5就移除最旧的字节
            if len(window) > TARGET_LEN:
                window.pop(0)
            # 窗口长度达到要求,且所有字节都在允许集合内,匹配成功
            if len(window) == TARGET_LEN and all(b in ALLOWED_BYTES for b in window):
                # 当前指针位置是读完匹配段的位置,回退5个就是目标偏移
                return f.tell() - TARGET_LEN

# 调用示例
offset = find_target_offset('你的目标文件路径')
if offset is not None:
    print(f'找到目标偏移:0x{offset:X}(十进制:{offset})')
else:
    print('未找到符合要求的连续字符')

注意事项

  • 必须用rb二进制模式打开文件,文本模式下的偏移量会受编码、换行符转换影响,结果不准确
  • 滑动窗口的设计不需要把整个文件读入内存,大文件场景下也能正常运行
  • 如果需要调整连续匹配的长度,直接修改TARGET_LEN的值即可

内容的提问来源于stack exchange,提问作者Thiago Martins dos santos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:06:04