Gast
#7245635
Als alter C-Hase bin ich gerade dabei, ein Programm in Java zu schreiben, das über Bluetooth gesendete Daten empfängt. Der Datenblock steht in einem Byte-Array mit 10 Elementen. Die letzten beiden Elemente enthalten High- bze. Low byte des CRC. Den CRC berechne ich mit der statischen Methode crc16 einer Klasse namens CRC, die selbstverständlich die letzten beiden Bytes auslässt. Das funktioniert und der so berechnete CRC stimmt mit dem übertragenen überein. Trotzdem wirft er mich häufig - aller dings nicht immer - mit einer CRCException raus:
1 | |
2 | |
3 | |
4 | |
Der Fehler scheint immer dann aufzutreten, wenn eines der Bytes > 127 ist. Anscheinend hat das irgendetwas mit dem Vorzeichen zu tun, vermutlich wandelt Java den Datentyp vor dem Vergleich vorzeichenrichtig in einen anderen um. Andererseits sollt ">>>" im Gegensatz zu ">>" ja gerade logisch und nicht arithmetisch schieben. Wie löst man das Problem? PS: In C wäre das mit "unsigned short" bzw. "uint16_t" sauber und elegant gelöst. Leider gibt es in Java keine unsigned Datentypen.