863
社区成员
发帖
与我相关
我的任务
分享
Dim aryData(1 To 12) As Byte
'模拟一个数据包,数据按用例填充。第10、11字节置0,准备计算填充
aryData(1) = &H2
aryData(2) = &H2B
aryData(3) = &H30
aryData(4) = &H30
aryData(5) = &H32
aryData(6) = &H30
aryData(7) = &H30
aryData(8) = &H30
aryData(9) = &H32
aryData(10) = &H0
aryData(11) = &H0
aryData(12) = &H3
Dim i As Integer
Dim btyCheck As Long '计算异或结果,按理应该是byte,但是为了避免后面取高4位时遇到符号位问题,我们用long来处理,这样结果一样但符号位在老远不会影响结果。
btyCheck = aryData(2) '先取第2个字节
For i = 3 To 9 '再把2和3~9字节逐个做异或
btyCheck = btyCheck Xor aryData(i)
Next
Debug.Print "异或校验结果:0x" & Hex(btyCheck) '按照用例,这里应该输出1B
Dim btyHi As Byte, btyLo As Byte
btyLo = btyCheck And &HF '取低四位
btyHi = (btyCheck And &HF0) / (2 ^ 4) '取高4位
Debug.Print "异或校验高四位:0x" & Hex(btyHi) '
Debug.Print "异或校低高四位:0x" & Hex(btyLo)
'先把高低位填入
aryData(10) = btyHi
aryData(11) = btyLo
'根据规则处理第10和11字节
For i = 10 To 11
If aryData(i) <= 9 Then
aryData(i) = aryData(i) + &H30
Else
aryData(i) = aryData(i) + &H37
End If
Next
Debug.Print "验证结果输出:"
For i = 1 To 12
Debug.Print " data(" & i & ")=" & Format(Hex(aryData(i)), "00")
Next