2009-04-09 12 views
2

Ich lese eine Datei von Serialport mit X-Modem-Protokoll und 133 Byte-Paket. Ich lese in diesenCRC-Berechnung in Java

 1 byte is SOH 
     2 byte packet number 
     3 byte nagative of packet number 
next 128 bytes data 
     2 bytes CRC sent from other side. 

Ich habe CRC von 128 Byte Daten und 2 Bytes crc von den anderen Seite gesendet zu berechnen, dass ich es einziges Byte machen und mit meinem berechneten crc comapare. Wie kann ich das in Java machen?

+0

Ok, welcher Kurs setzt Zuweisungen zum Lesen von seriellen Ports in Java? http://stackoverflow.com/questions/348777/reading-com-port-value-and-printing-in-textablea-which-located-inside-the-panel-in- –

Antwort

1

Sun JDK 1.6 enthält sun.misc.CRC16, aber es besteht die Möglichkeit, dass dies nicht der CRC16 ist, den Sie suchen, da mehrere verschiedene Polynome verwendet werden.

+0

Die Sun-Klasse verwendet Init = 0, Polynom = 0x1021. Es verwendet auch die naive bitweise Implementierung, nicht die tabellengesteuerte Implementierung. – EJP

5

Versuchen Sie mit Jacksum.

+0

Endanwenderseite für Jacksum: http://www.jonelo.de/java/jacksum/index.html –

1

Hier ist mein C-Code, der trivial ist, um Java zu portieren - Sie können ihn frei verwenden, wie Sie möchten. Die Verweise auf ein Wort beziehen sich auf einen 16-Bit-Wert ohne Vorzeichen - Sie sollten stattdessen ein Zeichen in Java verwenden können.

Es ist zu lange her, seit ich mit 16-Bit-CRCs gearbeitet habe, so dass ich mich nicht erinnere, ob es Variationen gibt, die auf dem Seeding basieren. Ich bin mir ziemlich sicher, dass ich diesen Code in einer C-Implementierung von X-Modem schon lange verwendet habe.

Die Quelle ist auf tech.dolhub.com veröffentlicht.