Ich habe ein Problem mit der Berechnung der Prüfsumme für NMEA-Sätze. Ich verwende den folgenden Java-Code:NMEA-Prüfsummenberechnung
private static String getSum(String in) {
int checksum = 0;
if (in.startsWith("$")) {
in = in.substring(1, in.length());
}
int end = in.indexOf('*');
if (end == -1)
end = in.length();
for (int i = 0; i < end; i++) {
checksum = checksum^in.charAt(i);
}
String hex = Integer.toHexString(checksum);
if (hex.length() == 1)
hex = "0" + hex;
return hex.toUpperCase();
}
Dieser Code ist ähnlich wie viele andere Beispiele rund um das Internet und alles funktioniert, bis ich einen Satz wie diesen versuchen ..
$PSRF101,-2686700,-4304200,3851624,96000,497260,921,12,3*1C
Dieser Satz ist von der NMEA Reference Manual und so nehme ich an, die Prüfsumme wird korrekt sein. Aber wenn ich es berechne, bekomme ich * 2F als Prüfsumme und nicht 1C.
Ich denke, das liegt an den negativen Werten im Satz, aber ich habe keine Ahnung, wie ich mit ihnen umgehen soll. Hat jemand einen Vorschlag?
Das '-' Zeichen macht keinen Unterschied: die Prüfsumme wäre immer noch '2F' –
Falsch, jedes Zeichen trägt dazu bei. Wenn Sie jedoch BEIDEN der Bindestriche entfernen, sind Sie in der Tat XORing zweimal ... das bringt Sie zurück, wo Sie waren. Das Entfernen des einen oder anderen absolut ändert das Ergebnis. – Anders8