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

Python读取.hex或.bin文件获取起始地址值的相关问题咨询

解决方法

方法1:直接解析现有.hex文件提取起始地址

Intel HEX格式本身就携带地址信息,按照固定格式扫描即可得到文件的起始地址:

  • 优先提取HEX文件中扩展线性地址记录(记录类型04)和扩展段地址记录(记录类型02)的基地址值
  • 找到第一条数据记录(记录类型00),取其偏移地址和前面拿到的基地址相加,得到的就是整个文件的起始地址
  • 参考解析逻辑伪代码如下:
base_addr = 0x0
start_addr = None
for line in hex_file_lines:
    # 去掉行首冒号后转成字节数组
    line_bytes = bytes.fromhex(line.strip()[1:])
    record_type = line_bytes[3]
    if record_type == 0x02:
        # 扩展段地址左移4位得到基地址
        base_addr = (line_bytes[4] << 8 | line_bytes[5]) << 4
    elif record_type == 0x04:
        # 扩展线性地址左移16位得到基地址
        base_addr = (line_bytes[4] << 8 | line_bytes[5]) << 16
    elif record_type == 0x00 and start_addr is None:
        # 第一条数据记录的偏移地址加基地址即为起始地址
        offset = line_bytes[1] << 8 | line_bytes[2]
        start_addr = base_addr + offset
        break

拿到start_addr后如果判定等于0x3000,直接填充0x0000到0x2FFF的地址区间即可。注意如果需要填充的是ASCII字符F,对应十六进制值为0x46;如果是填充Flash擦除后的默认状态则用0xFF,可根据实际需求调整填充值。

方法2:bin转hex阶段直接记录起始地址

bin文件本身不携带地址信息,转换为hex时的地址偏移是人工/工具指定的,你可以在转换阶段直接记录该值不需要后续解析:

  • 使用srec_cat工具转换:srec_cat input.bin -binary -offset 0x3000 -output output.hex -intel,此处传入的0x3000就是生成的hex文件的起始地址
  • 使用objcopy工具转换:objcopy -I binary -O ihex --change-addresses 0x3000 input.bin output.hex,此处的--change-addresses参数值就是文件起始地址

内容的提问来源于stack exchange,提问作者immonual123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:27:05