crc16 Berechnen
-
Ich versuche per Netzwerk die Kommunikation mit einem Gerät herzustellen. Dafür nutze ich QTcpSocket, was soweit auch klappt.
Die Übertragungspackete beinhalten eine Checksumme. Laut Beschreibung soll das crc16 sein. Jedoch schaffe ich es nicht auf das gleiche Ergebnis zu kommen, wie in den Beispielen gegeben sind.
Wenn ich folgendes übertrage:
00:00:00:0e:7d:98:b2:00:ce:64:00:00:00:00:01:01:01:01Bekomme ich als Antwort:
00:00:00:0e:00:31:16:80:b6:b2:7d:98:b2:01:02:01:01:01Wobei die Checksumme bei der Übertragung ce:64 - 9. und 10. Byte sind.
Beim Antwort die gleiche Bytestellen, b6:b2 sind.L.t. Anleitung wird die Checksumme berechnet, indem man die erste vier Bytes weg lässt, d.h. 00:00:00:0e wird nicht beachtet. Die Stelle von der Checksumme mit 00:00 überschreibt. Also von folgende Bytes soll die Checksumme berechnet werden:
7d:98:b2:00:00:00:00:00:00:00:01:01:01:01und Ergebnis ce:64 erscheinen.
Oder von00:31:16:80:00:00:7d:98:b2:01:02:01:01:01Checksumme b6:b2.
Ich hatte das mit qChecksum unter QT versucht. Dabei wird CRC-16-CCITT verwendet. Das Ergebnis ist jedoch anderes.
Auch das hier hatte ich versucht
http://www.mikrocontroller.net/topic/12177
jedoch ergibt das dortige auch was anderes, als erwünscht.
Habe auch 0x0 oder 0xffff als Start versucht und noch andere Codes, die ich im Internet fand. Auch andere Werte als 0xA001 als Polynom.Daher die Frage, kann mir jemand sagen, wie ich zu obige Checksummen komme?
-
Gibt es niemand, wer mir helfen kann? Oder habe ich bei meine Frage etwas falsch, bzw. undeutlich geschrieben?
Ich habe schon etliche Versuche durchgeführt, auf die Checksumme zu kommen, leider half kein google-Fund mir weiter.
Würde mich echt freuen, wenn sich jemand melden könnte.