python 计算Intel HEX文件 HEX记录校验和

什么是Intel HEX文件格式?
》》一般:英特尔HEX文件格式

简单的说:
英特尔HEX文件由任意数量的数据记录组成,这些数据记录以回车符和换行符结束。

例如数据记录如下:10246200464C5549442050524F46494C4500464C33
该记录解码如下:
10是记录中的数据字节数。
2462是数据在存储器中的地址。
00是记录类型00(数据记录)。
464C … 464C是数据。
33是记录的校验和。

校验和如何计算?
校验和的计算方法是将记录中所有十六进制数字对的值相加模256(0x100)并取补码。
例如:
10246200464C5549442050524F46494C4500464C的校验码计算为:
0x100-(0x10+0x24+0x62+0x00+0x4c+…+0x46+0x4c)mod(0x100)

mod运算即取余运算(%),例如:
150mod100=50;
3mod5=3;
5mod3=2;
看,对吧,其实很简单!

我就直接附上python代码极其代码说明吧

def check(DD):
    length=len(DD)  #求长度

    #创建一个list,将传入的str的每两个数合在一起,再求和
    list1=[]
    if(length%2==1):    #如果str长度为单数,则抛出错误
        print('[!] 数据长度有误')
    else:   
        for i in range(0, length, 2):  #range(开始,结束-1,每次加多少)  这里即0——length-1  每次循环i+2
            hex_digit=DD[i:i + 2]      #将传入的str的每两个数合在一起
            list1.append('0x'+hex_digit)    #再每个字符前+0x  但是它仍然是字符,但更便于下面通过int(list1[i], 16)转换成16进制
    print(list1)

    sum=0
    for i in range(int(length/2)):   #求和
        sum=int(list1[i], 16)+sum      #int(list1[i], 16)将16进制转换成10进制 int类型
    sum=sum%256
    sum=256-sum
    print('校验码: '+hex(sum))   #将sum和结果转换成16进制  hex(sum)

if __name__=="__main__":
    DD=input("请输入HEX文件数据记录(校验值除外):")   #input接收参数为str类型
    check(DD)

再附上一个运行结果:

请输入HEX文件数据记录(校验值除外):1000B00053F021E30CD09FE501AB4DE208009FE5
['0x10', '0x00', '0xB0', '0x00', '0x53', '0xF0', '0x21', '0xE3', '0x0C', '0xD0', '0x9F', '0xE5', '0x01', '0xAB', '0x4D', '0xE2', '0x08', '0x00', '0x9F', '0xE5']
校验码: 0x32

当然,完整的Intel HEX文件还有其它的数据格式,这里就只简单说明这一种啦。其它详情仍可参考最上面的链接。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这是一个死肥宅

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值