Konvertieren CRC-CCITT Kermit 16 DELPHI Code in C #
Frage
Ich arbeite an einer Funktion, die mir einen Kermit CRC-Wert aus einem HEX-String geben. Ich habe ein Stück Code in DELPHI. Ich bin ein .NET-Entwickler und müssen den Code 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;
Ich habe den Code von dieser Webseite: Kermit CRC in DELPHI
Ich denke, die Delphi-Funktion korrekt ist. Wenn jemand den Code C umwandeln bitte können #, dass groß sein. Ich habe versucht, C # zu konvertieren, bekam aber in WORD Datentyp und die LO-Funktion von Delphi verloren. Vielen Dank an alle.
Lösung
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);
}
Verwenden Sie Encoding.ASCII < a href = "http://msdn.microsoft.com/en-us/library/system.text.encoding.getbytes.aspx" rel = "nofollow noreferrer">. GetBytes (string) eine string
konvertieren zu einem byte[]
.
Andere Tipps
Ein Wort ist eine 16-Bit-Ganzzahl (die die Werte speichern kann 0..65535).
Lo gibt das niederwertige Byte eines Integer. Wenn also die ganze Zahl 0x7B41AF ist zum Beispiel lo werden 0xAF zurück.