[用于Intel Hex的8位行校验和计算器

问题描述 投票:0回答:1

我正在尝试提出一个Python解决方案来获取I​​NTEL 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

python arduino hex checksum
1个回答
0
投票

您的计算似乎缺少双补数部分,必须将其应用于计算出的总和:

def twoComplement(n):
    return ((n ^ 0xFF) + 1) & 0xFF

进一步的分析结果是,字节字符串的总和是根本问题,因为它与字节数组实例的总和或字节总和完全不同:sum(b'00')返回96。

总和应应用于相应的十六进制数字串的binascii.unhexlify()的结果。

© www.soinside.com 2019 - 2024. All rights reserved.