求教vb串口通信纠错计算方法问题
抓到通信的包,多的时候有100多个数据,倒数第二和第三个字节能根据内容发生变化,用书上说的最简单方法好象不是除255这种方式,学生愚笨没学CRC和其它校检算法,求教大师们能解答采用的纠错计算方法吗?能指导怎么计算吗?下面的是最短的三组数据:
aa c1 2a 45 42 bb ------第一组
aa c7 2a 45 44 bb ------第二组
aa d1 30 32 30 30 30 31 2a 46 38 bb ------第三组
高分感谢!
果然是有一张表,与我上面的猜测一样,刚写了个代码一验证,完全正确啊哈哈.
L() = Split(K, " ")
J = CByte("&H" & L(1)) Xor CByte("&H" & L(2))
For I = 3 To UBound(L) - 3
J = J Xor CByte("&H" & L(I))
Next
K = Hex(J)
I = Asc(Mid(K, 1, 1))
J = Asc(Mid(K, 2, 1))
Select Case I
Case Is < 58 '数字
I = I - 18
Case Is > 64 '字母
I = I - 24
End Select
Select Case J
Case Is < 58 '数字
J = J - 18
Case Is > 64 '字母
J = J - 24
End Select
Debug.Print I, J
End Sub
'data = "AA C6 30 30 30 31 30 30 30 30 30 30 30 31 30 30 30 30 30 30 31 33 30 30 30 30 30 30 30 31 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 2A 45 44 BB"
chr() = Split(data, " ")
For i = 1 To UBound(chr) - 3
byteXor = byteXor Xor Val("&H" & chr(i))
Next i
C1 = byteXor \ 16
C2 = byteXor And &HF
If C1 < 10 Then '0 - 9
C1 = C1 + &H30
Else 'A - F (10 - 15)
C1 = C1 + &H37
End If
If C2 < 10 Then
C2 = C2 + &H30
Else
C2 = C2 + &H37
End If
Debug.Print Hex(C1), Hex(C2)
End Sub