Hi, schon seit Stunden bin ich schon auf der wahren CRC16-Checksumme fuer folgende Bytes: 0x08 0x60 0x81 0x98 0xF0 0x81 0x8A serversniff.de behaupted da kommt 0xDA 0x72 als CRC16 bei raus. jacksum, so'n Java-Proggi meint, es kommt dabei ebenfalls 0xDA 0x72 bei raus. Wenn ich aber Peter Danneggers Routine aus http://www.mikrocontroller.net/forum/read-4-49752.html#89913 nehme, kommt da 0xDA 0x69 bei raus, auch die AVR-include-utils-crc16.h _crc16_update Funktion bringt mir genau das Ergebnis. Jetzt hiess es mal glaubich, wenn ich den gesamten String inkl. CRC16 nochmal durch die CRC16-Maschinerie laufen lasse, soll 0x00 0x00 bei rauskommen. Bei serversniff.de und auch bei jacksum kommt dann aber 0x7E 0x7E bei raus. Was ist jetzt richtig? Es steht 2:2....... Ich geh' jetzt ersma inne Firche... Hegy
Tja, da gibt es wohl verschiedene Implementationen, einmal die falsche und einmal die richtige: http://www.joegeluso.com/software/articles/ccitt.htm
Tja, scheint, als ob Microsoft's VFP mit seiner eingebauten Funktion SYS(2007) ebenfalls die falsche CRC-16 berechnet. Gut, wenn man sich nicht auf eingebaute Funktionen verlaesst und diese (soweit als möglich) selbst schreibt.
Hallo, ich denke beide CRC16 Implementierungen arbeiten für sich gesehen richtig. Der Entscheidene Punkt ist das Generator Polynom. Das kann bei den CRC16 Implementierungen ja unterschiedlich sein. Wenn dem so ist kommen auch verschiedene Ergebnisse raus. Jedes für sich gesehen ist aber richtig. CRC-CCITT (CRC-16) = x16 + x12 + x5 + 1 IBM-CRC-16 = x16 + x15 + x2 + 1 Ein weitere Punkt ist Startwert bei der CRC Berechnung 0x0000 oder 0xffff beides ist gebräuchlich, ergibt aber jeweils ein anderes Ergebnis. Siehe auch: http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung Tschau Michael
Hi, mit CRC16 meinte ich auch CRC16 und nicht CRC-CCITT. Aber ich habe die Loesung fuer die unterschiedlichen Ergebnisse gefunden, denn alle Ergebnisse sind richtig. Die online-Berechnung bei serversniff,de und auch jacksum, das Java Proggi rechnen mit einem Startwert von 0, wohingegen die CRC16-Routine von Danegger oder auch die_crc16_update.h mit einem Startwert von 0xFFFF rechnen. Daher die unterschiedlichen Ergebnisse.
CRC16 heißt einfach nur, dass da eine CRC mit 16Bit berechnet wird. Es gibt da keinen Standard dafür. Das Ding von der CCITT ist natürlich auch eine CRC16. So wie die von IBM oder Microsoft. Da die Generator-Polynome unterschiedliche Qualität haben denkt man sich aber besser nicht einfach eines aus, sondern nimmt ein getestetes. Aus diesem Grund benutzen die Programmierer z.B. das Polynom aus dem Buch, aus dem sie den Algorithmus haben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.