# crc berechnung



## melmager (3. Dezember 2004)

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:

```
z:= i xor (i shr 4)
table[i] := (z xor 8) xor (z shl 3) xor (z shr 4)
```

und der update teil:

```
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).

```
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


----------



## Sergunja (6. Dezember 2004)

Hallo
sehe mal diesen Beitrag, http://www.tutorials.de/tutorials179214.html vielleicht hilft es dir weiter

Gruss


----------



## melmager (6. Dezember 2004)

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


----------

