Java-code für die CRC-Berechnung
Ich bereits funktionierende Beispiele, die Berechnung der CRC-8, CRC-16, CRC-32 in Java, aber Sie sind verschiedene Implementierungen und ich bin ein bisschen verwirrt. Ich versuchte zu Lesen, die Mathematik tech-docs, aber es scheint ein bisschen zu viel für mein Mathe-Niveau. Auch, konvertieren von code aus C/C++ ist nicht so einfach, da Java nicht gut tun, mit unsigned primitive...
Brauche ich ein vollständiges Beispiel zu verstehen und in der Lage sein zu überprüfen, meine Prüfsummen, da gibt es viele verschiedene Polynome, die es gibt!
Sehen Beste CRC-Polynome von Philip Koopman und CRC Hamming-Gewicht von Philip Koopman.
Ich würde mich freuen, wenn jemand ein minimum, aber detaillierte Beispiel in Java, z.B. für die CRC-8, hat:
- Berechnet die Prüfsumme von byte-array (ohne lookup-Tabelle).
- Programmgesteuert erstellen der crc lookup-Tabelle.
- Berechnet die Prüfsumme von einem byte-array mithilfe der lookup-Tabelle.
InformationsquelleAutor fubar | 2015-03-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, was ich managed, um gemeinsam für CRC-8. Noch kann ich nicht ganz verstehen, wie das Polynom produziert, vor allem, warum sollten wir/könnten die umgekehrte version! Ich vermisse auch eine CRC-16, CRC-32 und vielleicht ein CRC-64 vollständiges Beispiel, wie die, die ich unten. Ich hoffe, jemand anderes zu erfüllen diesen Bedarf in der Zukunft.
Dieser code verwendet
polynomial: 0xa6 = x^8 + x^6 + x^3 + x^2 + 1 (0x14d) <=> (0xb2; 0x165)
als Mark Adler schlägt hier und basiert auf diese tests , zeigt die Stärke dieses Polynoms.!useLookupTable
Zweig sollte auch& 0xff
nach^ b
. Andere als die, es sieht gut aus.Dies geschieht in get(), die tatsächlich liefert die CRC-Wert bis jetzt. update() nur berechnet die CRC und es werden viele Male aufgerufen werden, bis alle bytes interpretiert werden. Getestet habe ich die Ergebnisse mit jacksum-1.7.0 mit diesem Befehl
jacksum.bat -X -q "txt:123456789" -F "#ALGONAME #SEPARATOR #CHECKSUM" -a crc:8,4D,FF,true,true,FF
und Kontrollen. Bin ich etwas fehlt?Die
& 0xff
vermeidet Probleme mit der sign-extension vonbyte b
. Beachten Sie, dass die^ 0xff
und die& 0xff
sind unterschiedlich und unabhängig.Da der CRC ist es Umgekehrt, das Polynom
0x4d
muss auch umgedreht werden, wodurch0xb2
.Es ist das gleiche Polynom. Koopman-notation fällt das niederwertigste 1, dass alle CRC-Polynome muss ein Ende haben, und umfasst die wichtigsten 1 das ist in der Regel ausgelassen. Also die echte Polynom mit allen Begriffen ist
0x14d
. Wenn Sie verschieben, dass unten ein, Sie erhalten Koopman ist0xa6
. Der Vorteil Koopman-notation ist, dass die Größe des Polynoms explizit, indem wir die bedeutendste.InformationsquelleAutor fubar