Я на самом деле не эксперт по VB, я занимаюсь в основном C, C ++ и C #, но я думаю, что это было одно из ваших преобразований, которое, я думаю, не нужно. Это работает для меня:
Function CRC16(data As Byte()) As Byte()
Dim crcfull As UInt16 = &HFFFF
Dim crchigh As Byte, crclow As Byte
Dim crclsb As Byte
For i As Integer = 0 To data.Length - 1
crcfull = crcfull Xor data(i)
For j As Integer = 0 To 7
crclsb = crcfull And &H1
crcfull = crcfull >> 1
If (crclsb <> 0) Then
crcfull = crcfull Xor &HA001
End If
Next
Next
crchigh = (crcfull >> 8) And &HFF
crclow = crcfull And &HFF
Return New Byte(1) {crclow, crchigh}
End Function