我正在尝试提出一个Python解决方案来获取INTEL HEX FILE FORMAT的行校验和。
the_bytes = b'100000000C9425010C944D010C944D010C944D01'
a = b'%02X' % (sum(the_bytes) & 0xFF)
print(int(a))
我想出了计算一行中元素之和的位,但是我无法获得校验和位(在http://www.keil.com/support/docs/1584/中有描述)
例如,一行:
100000000C9425010C944D010C944D010C944D0160
100000000C9425010C944D010C944D010C944D01是数据
60是行校验和。
http://easyonlineconverter.com/converters/checksum_converter.html
您的计算似乎缺少双补数部分,必须将其应用于计算出的总和:
def twoComplement(n):
return ((n ^ 0xFF) + 1) & 0xFF
进一步的分析结果是,字节字符串的总和是根本问题,因为它与字节数组实例的总和或字节总和完全不同:sum(b'00')
返回96。
总和应应用于相应的十六进制数字串的binascii.unhexlify()
的结果。