VB6 CRC计算错误输出

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

我正在尝试找出串行控制设备的CRC检查。我有一个示例,当我将此示例发送到设备时,它会正确响应。

这是设备响应的完整串行字符串:

\x00\x17\x3d\x30\x32\x32\x30\x39\x39\x30\x30\x30\x30\x30\x30\x30\x30\x30\x37\x34\x30\x30\x30\x30\x30\x01\x28

((最后2个字节(\ x01 \ x28)是CRC结果)。

这是我的代码:

Dim Send As String
Dim CRC1 As String
Dim CRC2 As String
Dim TEMP As String

Private Sub Command1_Click()

Send = &H0 & &H17 & "=" & "022" & "099" & "00" & "00" & "0000074" & "00000"

CRC1 = &H0
CRC2 = &H0
TEMP = &H0

For i = 1 To Len(Send)
    TEMP = CRC1
    CRC1 = CRC2 Xor Asc(Mid$(Send, i, 1))
    CRC2 = TEMP

Next i

Text1.Text = "CRC1= " & CRC1 & " / CRC2= " & CRC2

End Sub

输出应为:CRC1 = 1(十进制)和CRC2 = 40(十进制)但是我得到51/60。

我认为这与数据类型有关。

这是设备的原始CRC公式:

Set <CRC1> and <CRC2> to zero.
For every <CHAR> in <MSG> do
<TEMP> = <CRC1>
<CRC1> = <CRC2> XOR <CHAR>
<CRC2> = <TEMP>

提前感谢!

vb6 crc
1个回答
0
投票

您应该查看您的字符串Send,以确保它是您想要的。不是。其构造需要为:

Send = Chr(&H0) & Chr(&H17) & ...

然后您会得到所需的答案。

顺便说一句,您正在计算的东西绝不是CRC。编写该公式的人都不知道他们在说什么。他们构造的是糟糕的校验值算法,因此他们也不知道自己在做什么。

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