Pregunta

Estoy trabajando en una función que me dará un valor Kermit CRC de una cadena hexadecimal. Tengo un pedazo de código en Delphi. Soy un desarrollador de .NET y necesito el código en 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;

Tengo el código de la página: Kermit CRC en DELPHI

supongo que la función de Delphi es correcta. Si cualquiera puede complacer a convertir el código C # que será grande. He intentado convertir a C #, pero se perdió en el tipo de datos WORD y la función LO de Delphi. Gracias a todos.

¿Fue útil?

Solución

foros de 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 < a href = "http://msdn.microsoft.com/en-us/library/system.text.encoding.getbytes.aspx" rel = "nofollow noreferrer">. GetBytes (cadena) para convertir una string a un byte[].

Otros consejos

Una palabra es un entero sin signo de 16 bits (que puede almacenar los valores 0..65535).

Lo devuelve el byte de orden bajo de un número entero. Así que si el entero es 0x7B41AF, por ejemplo, lo devolverá 0xAF.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top