Zyklische Redundanzprüfung (CRC) in C#
-
Hallo,
ich beschäftige mich gerade mit der zyklischen Redundanzprüfung (CRC). Dazu arbeite ich gerade folgenden Wikipedia-Artikel durch:
- https://de.wikipedia.org/wiki/Zyklische_RedundanzprüfungIch habe auch verstanden wie das CRC-Verfahren funktioniert. Auf Papier kann ich den CRC-Wert problemlos berechnen, nur die Umsetzung des Verfahrens in C# bereitet mir Probleme.
Ich habe den C-Code von Wikipedia übernommen und ihn in C# umgewandelt:
uint CRC32MASK = 0x35; // Generatorpolynom (32-Bit) uint[] bitstream = { 0, 0, 0, 1, 1, 0, 1, 1 }; // Nutzdaten (Rahmen) uint crc32 = 0; // Schieberegister for (int i=0; i<bitstream.Length; i++) { if ( ((crc32 >> 31) & 1) != bitstream[i]) crc32 = (crc32 << 1) ^ CRC32MASK; else crc32 = (crc32 << 1); } // CRC-Wert ausgeben MessageBox.Show( Convert.ToString(crc32, 2) );
Laut Wikipedia müsste ein CRC-Wert von 101 (binär) herauskommen. Ich erhalt jedoch den Wert 1010100111 (binär).
Könnt ihr mir sagen woran das liegt? Was mache ich falsch?
Vielen Dank,
MfG arenas
-
Wieso wundert es dich, dass eine Funktion die eine 32 Bit CRC berechnet nicht eine 5 Bit CRC berechnet?
Versuch 'mal
>> 31
in>> 4
umzuwandeln...ps: Das höchstwertige Bit im Polynom brauchst du nicht, d.h.
0x15
tut's auch.