猿问

vb.net中来自String的CRC-16 / ARC

我有下面的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,而不是取回值。


慕仙森
浏览 386回答 1
1回答

慕哥6287543

我不认为“ ^”能满足您的要求。使用“ Xor”代替。C#^运算符参考-异或运算符VB ^运算符参考-幂/指数运算符
随时随地看视频慕课网APP
我要回答