0

我正在开发一个函数,该函数将为我提供来自 HEX 字符串的 Kermit CRC 值。我在 DELPHI 有一段代码。我是 .NET 开发人员,需要 C# 中的代码。

function CRC_16(cadena : string):word; 
var 
valuehex : word; 
i: integer; 
CRC : word; 
Begin 
   CRC := 0; 
   for i := 1 to length(cadena) do 
   begin 
      valuehex := ((ord(cadena[i]) XOR CRC) AND $0F) * $1081; 
      CRC := CRC SHR 4; 
      CRC := CRC XOR valuehex; 
      valuehex := (((ord(cadena[i]) SHR 4) XOR LO(CRC)) AND $0F); 
      CRC := CRC SHR 4; 
      CRC := CRC XOR (valuehex * $1081); 
   end; 
  CRC_16 := (LO(CRC) SHL 8) OR HI(CRC); 
end;

我从这个网页得到了代码:Kermit CRC in DELPHI

我猜Delphi函数是正确的。如果有人可以请将代码转换为 C#,那将是很棒的。我试图转换为 C#,但迷失在 WORD 数据类型和 Delphi 的 LO 函数中。谢谢你们。

4

2 回答 2

2

MSDN 论坛

static long ComputeCRC(byte[] val)
{
    long crc;
    long q;
    byte c;
    crc = 0;
    for (int i = 0; i < val.Length; i++)
    {
        c = val[i];
        q = (crc ^ c) & 0x0f;
        crc = (crc >> 4) ^ (q * 0x1081);
        q = (crc ^ (c >> 4)) & 0xf;
        crc = (crc >> 4) ^ (q * 0x1081);
    }
    return (byte)crc << 8 | (byte)(crc >> 8);
}

使用Encoding.ASCII .GetBytes(string)将 a 转换stringbyte[].

于 2010-05-09T16:49:56.647 回答
0

一个字是一个 16 位无符号整数(可以存储值 0..65535)。

Lo 返回整数的低位字节。因此,如果整数是 0x7B41AF,例如,lo 将返回 0xAF。

于 2010-05-09T16:50:50.417 回答