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üfung

    Ich 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.


Log in to reply