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文件还有其它的数据格式,这里就只简单说明这一种啦。其它详情仍可参考最上面的链接。

猜你喜欢

转载自blog.csdn.net/qq_28840013/article/details/84143501
hex
今日推荐