Domanda

Sto lavorando ad una funzione che mi darà un valore Kermit CRC da una stringa esadecimale. Ho un pezzo di codice in Delphi. Sono uno sviluppatore .NET e bisogno del codice in 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;

ho ottenuto il codice da questa pagina web: Kermit CRC in Delphi

credo che la funzione Delphi è corretta. Se qualcuno può piacere a convertire il codice in C # che sarà grande. Ho cercato di convertire in C #, ma sono perso nei WORD tipo di dati e la funzione LO di Delfi. Grazie a tutti.

È stato utile?

Soluzione

forum 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 (stringa) per convertire un string ad un byte[].

Altri suggerimenti

Una parola è un numero intero senza segno a 16 bit (che può memorizzare i valori 0..65535).

Lo restituisce il byte di ordine inferiore di un numero intero. Quindi, se il numero intero è 0x7B41AF, per esempio, lo restituirà 0xAF.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top