Hallo, ich habe ein Verständnisproblem was die CRC Berechnung betrifft. Im unteren Beispiel berechne ich von nur einem Byte die CRC Prüfsumme. Auf der WIkipediaseite http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung ist ein simples Beispiel aufgeführt, indem die CRC von einem Wert berechnet wird. Auf dieser Berechnung entsteht ein Rest der beim Prüfen an den Datenramen angehängt wird und wiederum die CRC berechnet wird. Folglich kommt da eine Null heraus. Somit ergab die CRC Prüfung keinen Fehler. Wenn ich jetzt mein Beispiel dazu nehme, erzeuge ich aus einem Byte eine CRC Prüfumme. Wie kann ich jetzt in meinem kleinen Beispiel die Gegenprüfung machen ?
1 | #include "stdafx.h" |
2 | #include <stdio.h> |
3 | #include <stdlib.h> |
4 | |
5 | |
6 | /*******************************************************************/
|
7 | unsigned int crc32(unsigned int crc, unsigned char byte) |
8 | /*******************************************************************/
|
9 | {
|
10 | char i; |
11 | crc = crc ^ byte; |
12 | for(i=7; i>=0; i--) |
13 | crc=(crc>>1)^(0xedb88320ul & (-(crc&1))); |
14 | return(crc); |
15 | }
|
16 | |
17 | |
18 | int _tmain(int argc, _TCHAR* argv[]) |
19 | {
|
20 | unsigned int reg = 0xffffffff; |
21 | |
22 | reg=crc32(reg,(unsigned char)0x20); |
23 | |
24 | printf("%08x %08x \n",reg,reg^0xffffffff); |
25 | |
26 | return 0; |
27 | }
|