Hallo,
ich versuche grade auf einer SPS eine CRC32 Funktion zu schreiben, da die SPS Libs nur einen CRC 16 hergeben.
Mein Code funktioniert zwar grundsätzlich, leider stimmt mein CRC32 nicht mit den üblichen Verfahren überein.
Ich habe zu Testzwecken mal den String "1234" als Daten hergenommen. Mein Polynom ist 16#04C11DB7, binär also 1 0000 0100 1100 0001 0001 1101 1011 0111.
An meine Daten (chars, also 4 Byte) hänge ich 32 Nullen an.
Nun gehe ich her und wende das 33 bit Polynom mit XOR auf die Daten an, beginnend mit der ersten 1 in den Daten. Vom Ergebnis entferne ich die führenden Nullen und fülle mit den nächsten Bits aus den Daten auf und mach die nächste XOR Verknüpfung mit den neuen Daten.
Im Internet habe ich eine Seite gefunden die für CRC32 die binären Operationen Schritt für Schritt anzeigt, mein Programm tut exakt das selbe. Am Ende bleibt ein Rest übrig, der auch exakt dem Wert aus dem Internetbeispiel entspricht. Also so scheint schon mal alles richtig zu sein. Allerdings entspricht das Ergebnis nicht dem Wert, was die üblichen verdächtigen CRC32 Online-Generatoren ausspucken. Nun wird ja bei den Generatoren noch ein Inital Value verwendet und außerdem sind je nach Verfahren noch Optionen wie "RefIn", "RefOut", "XorOut". Damit weiß ich nicht genau wie ich das impelemtieren soll. Kann mir jemand sagen wo meine Fehler liegen und was ich noch implementieren muss um auf das richtige Ergebnis zu kommen?
Grüße, Andre