python fromhex长度问题_任意长度HEX文件的解析(Python实现)

1. 程序的功能

可解析大于64KB的HEX文件。限于时间条件,笔者只测试了两个样例,数据域大小分别为8332B和1.61MB

将解析得到的结果打印出来,包括:

- 起始地址

- 末尾地址

- 数据域尺寸(单位:字节)

保存数据域的内容为bin文件以便查验和后续处理

2. 程序解读

HEX文件解析,相关函数:hex2bin()

考虑到HEX文件通常不会很大,所以一次性读取全部内容,每1行为1个list,然后逐行分析

通过识别每1行的TT字段来执行相应的操作,流程图如下:

(1)数据打包

相关函数:char2hex()

通过readlines函数读取到的是一行行字符串,如第一行是“:020000040800F2”,此外末尾还包含一个不可见的回车符号。

我们要将数字字符转换成对应的整型数据以便运算和存储,行首的冒号和行尾的回车符仅用于格式判断,对于数据提取是无用的,故去除。

HEX格式定义中的记录域是以字节为最小单位的,所以还需要将两个整型字符拼成1个字节。

python提供的高阶函数map()和切片操作,极大地方便了我们对HEX文本进行信息提取和格式转换。

char2hex()函数最终返回的是如下形式的整型列表:[0x02,0x00,0x00,0x04,0x08,0x00,0xF2]

(2)校验和

相关函数:checksum()

得到了1行数据的整型列表以后,最好对该行数据校验一下。

按照规定,每行记录的倒数第1个字节是校验和(Checksum),校验算法为:

0x100-((除了冒号以外的所有数据以字节为单位相加)%256)

笔者的代码实现如下:sum = (0x100 - (reduce(lambda x,y:x+y,line[:-1]) % 256)) % 256

之所以最后要再对256取模,是考虑到算出来的结果正好为0x100的情况,在C语言里,不做这一步当然OK,因为C语言中数据类型有自身的固定长度,

超出长度的高位部分会自动截断,对于8位无符号数,0x100==0x0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值