Ich versuche, mit einigen Systemen zu interagieren und in ihren Spezifikationen CRC 16 für die serielle Kommunikation zu berechnen. Hier ist ein Auszug aus der DokumentationWie berechnet man CRC 16 mit Polynom x16 + x12 + x5 + 1
"16-Bit-CCITT CRC der Nachricht, die das Standard-Polynom verwendet, X16 + X12 + X5 +1. Seed-Werte sind immer 0 (null)"
Als erstes habe ich nur gefunden 2-3 Beispiele von C# -Code, wie es geht und keiner der scheint mir den richtigen Wert zu geben. Ich habe dieses http://www.sanity-free.com/133/crc_16_ccitt_in_csharp.html versucht, aber ich bin nicht sicher, was man für Anfangswert einstellt. Ich habe versucht, Nullen und immer noch nicht funktioniert.
Daten-I-Tests bin es mit ist:
0x00 0x09 0x10 0x01 0x01 0x7C 0xF4 0xB8 0x00,
der CRC-Wert I erhalten ist
0xF2 0x24,
aber ihr System sagt es
0xC0 0x2F
Mein Verständnis ist, sein sollte, dass Polynom x16 + x12 + x5 + 1 = 0x11021, aber selbst wenn ich dieses im Code verwende, gibt es immer noch eine falsche Antwort. Was mache ich falsch?
+1 Für 'Selbst Learner' –
Nein, es ist das gleiche Polynom. Es ist sehr üblich für CRC-Implementierungen, das Bit-umgekehrte Polynom zu verwenden. 0x1021 ist umgekehrt 0x8408. Die Beschreibung des CRC16-CCITT Kermit CRC befindet sich unter http://reveng.sourceforge.net/crc-catalogue/16.htm#crc.cat.kermit, wo die Reflektion notiert wird. –
@MarkAdler Danke – fenix2222