简单的Hex文件解析

本文介绍了Hex文件的格式,包括数据类型和校验和计算,并展示了如何使用Qt编写代码来解析Hex文件,将数据保存到临时文件中。在解析过程中,首先初始化一个缓冲区,然后逐行读取文件,根据行数据的长度和地址更新数据,最后将解析出的数据转换为16进制字符串。
摘要由CSDN通过智能技术生成

最近在做一个 Bootload,需要用到Hex文件

Hex的格式如下,网上也很多

第一个字节 0x10表示本行数据的长度;

第二、三字节 0x00 0x08表示本行数据的起始地址;

第四字节 0x00表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。

'00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录

'01&#

解析hex文件的代码可以分为以下几个步骤: 1. 打开hex文件读取数据 ``` file = open("test.hex", "r") data = file.readlines() ``` 2. 解析每行数据 ``` for line in data: # 去除换行符 line = line.strip() # 解析行号、数据类型、地址和数据 line_no = int(line[1:3], 16) data_type = int(line[7:9], 16) addr = int(line[3:7], 16) line_data = line[9:-2] # 根据数据类型解析数据 if data_type == 0: # 数据记录 for i in range(0, len(line_data), 2): byte = int(line_data[i:i+2], 16) # 处理数据 elif data_type == 1: # 结束记录 break elif data_type == 2: # 扩展线性地址记录 addr_offset = int(line_data, 16) * 16 elif data_type == 3: # 扩展段地址记录 pass else: # 其他记录类型 pass ``` 3. 处理数据 根据数据类型解析出的数据,可以进行相应的处理。例如,如果是数据记录,可以将数据写入指定的内存地址;如果是扩展线性地址记录,可以计算出偏移地址。 完整的代码示例: ``` file = open("test.hex", "r") data = file.readlines() addr_offset = 0 for line in data: # 去除换行符 line = line.strip() # 解析行号、数据类型、地址和数据 line_no = int(line[1:3], 16) data_type = int(line[7:9], 16) addr = int(line[3:7], 16) + addr_offset line_data = line[9:-2] # 根据数据类型解析数据 if data_type == 0: # 数据记录 for i in range(0, len(line_data), 2): byte = int(line_data[i:i+2], 16) # 处理数据 print(hex(addr), hex(byte)) addr += 1 elif data_type == 1: # 结束记录 break elif data_type == 2: # 扩展线性地址记录 addr_offset = int(line_data, 16) * 16 elif data_type == 3: # 扩展段地址记录 pass else: # 其他记录类型 pass file.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值