2017-05-18 2 views
1

Nehmen wir an, ich habe zwei Zahlen X = 0xABC; Y = 0xDE. Ich möchte CRC-32 über Z berechnen, das X mit Y verkettet ist, d. H. Z = 0xABCDE.Wie kombiniere ich CRC-32 Ergebnisse?

Ich habe CRC (X) und CRC (Y) verfügbar. Wie kann ich CRC (Z) berechnen?

Antwort

0

Betrachten Sie crc32_combine() in zlib für den Ansatz.

Die Grundidee besteht darin, die Linearität von CRCs zu verwenden. Die CRC von 0xABC00 Exklusiv-Oder mit 0x000DE ist die exklusive oder ihrer entsprechenden CRCs. Wenn ich die Vor- und Nachbearbeitung ignoriere (was ich aus Gründen tun kann, die dem Leser überlassen werden), ändern führende Nullen die CRC nicht, so dass der CRC von 0xDE derselbe ist wie der CRC von 0x000DE. Alles, was ich tun muss, ist, den Effekt der Anhängen von Nullen zu berechnen, wenn mit der CRC von 0xABC begonnen wird, um die CRC von 0xABC00 zu erhalten. Dann exklusiv - oder diese zwei CRCs.

crc32_combine() Matrixmultiplikation nutzt den Effekt der Anfügen n Nullen in O (log (n)) Zeit anstelle von O (n) Zeit, so dass die Kombination von CRCs ist sehr schnell, unabhängig von der Länge zu berechnen, der die ursprünglichen Nachrichten.

+0

Ich habe Ihre Antwort auf Google-Gruppen gelesen, [link] (https://groups.google.com/forum/#!topic/comp.compression/SHyr5bp5rtc). Das Problem, mit dem ich konfrontiert bin, ist, dass ich versuche, dies auf Hardware (FPGA) zu implementieren. Ich habe den parallelen CRC-32-Rechner für ** 0xABC ** und ** 0xDE **, aber wenn ich versuche, den CRC-32 über ** 0xABC00 ** und ** 0x000DE ** zu berechnen, dann XOR die CRCs dann bekomme ich die Falsches Ergebnis wegen der ZEROS. – Tushar