Es wird hier viel über "korrekt" und "nicht korrekt" diskutiert. Mathematisch ist das Ergebnis einer Division, auch einer Polynomdivision, eindeutig festlegt. Nicht Gegenstand der Mathematik ist, wie man ein Polynom durch eine Bitfolge darstellt. Hier sind zwei Verfahren üblich: einmal wird das Bit, das in der Ganzzahl-Darstellung den Wert hat, als Koeffizient des Polynoms an der Stelle verwendet. Beim anderen Verfahren wird das in der Ganzzahl-Darstellung niederwertigste Bit für den höchsten Koeffizienten verwendet. Korrekt sind sie beide, nur muss man beim einen Verfahren die Bits von links nach rechts, und beim anderen von rechts nach links lesen. Das muss man natürlich sowohl für die Datenbits, als auch für das Generatorpolynom machen. Warum macht man das? Bei der Hardware-Implementierung mittels Schieberegister werden die Bits in der Reihenfolge angeliefert, in der sie übertragen werden. Bei serieller Übertragung (z.B.) Ethernet, ist es üblich, das niederwertigste Bit eines Bytes zuerst zu übertragen. Daher entspricht hier das niederwertigste Bit dem höchsten Koeffizienten. Bei der Implementierung in Software gibt es aus diesem Grund Verfahren, die erst mal alle Bits in einem Byte spiegeln, dann die Berechnung durchführen, und am Ende das Ergebnis wieder spiegeln. Bei Ross Williams heisst dieses Verfahren "Reflection". Das funktioniert zwar, scheint mir aber "von hinten durch die Brust ins Auge zu sein". Ich habe deshalb vor einiger Zeit ein paar C++ - Klassen entwickelt, die einen CRC-Algorithmus unabhängig von der Bit-Darstellung implementieren. Für die Darstellung gibt es eigene Klassen, die dann im Algorithmus als Templates verwendet werden. Das Ganze ist öffentlich (GPL) und unter http://www.aweiler.com/crc/index.html zu finden. -- -aw11:55, 6. Mai 2006 (CEST)