crc berechnung

melmager

Erfahrenes Mitglied
Ich liebe so kleine Nebensätze in einer Protokollbeschreibung :-(

...der Datensatz muss mit einer CRC CCITT Prüfsumme abgeschlossen werden...

also habe ich mal etwas eingelesen was ich verstanden habe ist die Prüfung Bitweise - könnte sie also in Java
umsetzen - aber es wird auch gesagt man sollte über eine Tabelle arbeiten - sehe ich ja ein denn das macht das ja wesendlich schneller, aber was ich nicht verstehe sind die Algorithmen die eine solche Tabelle erstellen

was ich gefunden habe ist:
Code:
z:= i xor (i shr 4)
table[i] := (z xor 8) xor (z shl 3) xor (z shr 4)

und der update teil:
Code:
crc := (crc shr 8) xor table[data xor lo(crc)] ;

das in Javacode zu giessen ist ja kein Problem aber ist das richtig ?
ich habe leider noch nix gefunden wo die tabellen version erklärt wird und wie ich auf den Code komme

Ps crc ccitt solle sein x16 x12 x5 +1 (die zahlen natürlich hoch gestellt :-)

und noch ein codeschnipsel den ich nicht verstehe :

// Update the CRC for transmitted and received data using
// the CCITT 16bit algorithm (X^16 + X^12 + X^5 + 1).
Code:
    unsigned char ser_data;
    static unsigned int crc;

    crc  = (unsigned char)(crc >> 8) | (crc << 8);
    crc ^= ser_data;
    crc ^= (unsigned char)(crc & 0xff) >> 4;
    crc ^= (crc << 8) << 4;
    crc ^= ((crc & 0xff) << 4) << 1;

hat einer von euch eine Idee zu der Tabellen Version?
brauche mal code und Tabelle :-)
 
Uff gar nicht so einfach -

Lustigerweise gibt es mehrere Versionen von CRC16 und ein Code den ich gefunden habe rechnet schon mal falsch :-(

Ps die Version die bei Jacksum dabei ist berechnet den CRC-ARC

Schaun wer mal - ich glaube ich verzichte auf die Versionen die mit einer Tabelle arbeiten
die normale Version ist zwar lahm aber ich blicke wenistends durch was da passiert :-)
 
Zurück