为了保证高效通信效率,实现数据正确性判断,避免数据传输过程中出现的错误数据,常采用和校验(SUM CHECK)和附加校验(ADD CHECK)的计算方法,一般和校验放在倒数第二帧,附加校验放在最后一帧。
以以下数据帧为例:
AA FF E1 02 00 00 8C 81
和校验 SUM CHECK 计算方法:
从帧头 0xAA 字节开始,一直到 DATA 区结束(倒数第三帧),对每一字节进行累加操作,只取低 8 位,计算结果为0x8C
附加校验 ADD CHECK 计算方法:
计算和校验时,每进行一字节的加法运算,同时进行一次 SUM CHECK 的累加操作,只取低 8 位。
累加操作的值第一次为0xAA 第二次为0X1A9 第三次为0X28A 第四次为0X28C 第五次为0X28C 第六次为0X28C 六次累加和的低8位为:0X81,就是附加校验结果
校验的python实现程序:
# -*- coding: gbk -*-
a = input("please input:\n")
#print (a.split( ))
#第一种方法
sc = hex(sum([int(i, 16) for i in a.split( )])& 0xFF)
print("和校验结果:",sc)
#第二种方法
SC = 0
AC = 0
for i in a.split( ):
SC += int(i, 16)
AC +=SC
print("校验结果为:",hex(SC & 0xFF), hex(AC & 0xFF))
print(a,hex(SC & 0xFF)[2:], hex(AC & 0xFF)[2:])
结果:
please input:
AA FF E1 02 00 00
和校验结果: 0x8c
校验结果为: 0x8c 0x81
AA FF E1 02 00 00 8c 81