vb.net - 使用 VB.Net 计算 Modbus CRC
问题描述
我尝试使用 VB.Net 计算 CRC,但值不同。
例如,如果我使用05 03 0B D3 00 01
数据 CRC 码应该是76 53
但我得到B6 45
这是我的 VB.Net 代码。
Private Function CRC(data As Byte()) As Byte()
Dim crcfull As UShort = &HFFFF
Dim crchigh As Byte = &HF, crclow As Byte = &HFF
Dim crclsb As Char
Dim result As Byte() = New Byte(1) {}
For i As Integer = 0 To (data.Length) - 3
crcfull = CUShort(crcfull Xor data(i))
For j As Integer = 0 To 7
crclsb = ChrW(crcfull And &H1)
crcfull = CUShort((crcfull >> 1) And &H7FFF)
If Convert.ToInt32(crclsb) Then
crcfull = CUShort(crcfull Xor &HA001)
End If
Next
Next
crchigh = CByte((crcfull >> 8) And &HFF)
crclow = CByte(crcfull And &HFF)
Return New Byte(1) {crclow, crchigh}
End Function
问题是什么?
解决方案
你应该打开 option strict ,你会看到这条线有问题。
If Convert.ToInt32(crclsb) Then
我不确定它应该做什么,但你不能用整数做一个 If 语句,它必须是一个布尔值。