CRC-16 / ARC из строки в vb.net - PullRequest
0 голосов
/ 02 мая 2018

У меня есть код c # ниже

public string CRCCalculator(string dtc)
{
    ushort crc = 0x0000;

    byte[] data = GetBytesFromHexString(dtc);

    for (var pos = 0; pos < data.Length; pos++)
    {
        crc ^= data[pos];
        for (var i = 8; i != 0; i--)
        {
            if ((crc & 0x0001) != 0)
            {
                crc >>= 1;
                crc ^= 0xA001;
            }
            else
                crc >>= 1;
        }
    }
    return crc.ToString("X4");
}

Но мне это нужно на vb.net, я лично пытался преобразовать его, и в прошлом я конвертировал большое количество кода на c # в vb.net, однако я не работал с ushort, битами и прочим.

Вот преобразованный код VB.net:

Public Shared Function CRCCalculator(dtc As String) As String
    Dim crc As UShort = &H0
    Dim data As Byte() = getBytesFromHexString(dtc)

    Dim pos = 0
    Do While (pos < data.Length)

        crc ^= data(pos)

        Dim i = 8
        Do While (i <> 0)
            i = (i - 1)
            If (crc And &H1) <> 0 Then
                crc >>= 1
                crc ^= &HA001
            Else
                crc >>= 1
            End If
        Loop

        pos = (pos + 1)

    Loop

    Return crc.ToString("X4")

End Function

Вместо возврата значения я всегда получаю 0.

1 Ответ

0 голосов
/ 02 мая 2018

Я не думаю, что "^" делает то, что вы думаете, что делает. Вместо этого используйте «Xor».

C # ^ ссылка на оператор - эксклюзивный или оператор
VB ^ ссылка на оператор - оператор степени / степени

...