CRC-16/ARC 来自 vb.net 中的字符串
CRC-16/ARC from String in vb.net
我有下面的 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 而不是取回值。
我认为“^”并不像您认为的那样。请改用 "Xor"。
C# ^ operator reference - 异或运算符
VB ^ operator reference - power-of/exponent 运算符
我有下面的 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 而不是取回值。
我认为“^”并不像您认为的那样。请改用 "Xor"。
C# ^ operator reference - 异或运算符
VB ^ operator reference - power-of/exponent 运算符