Ho un problema con il calcolo del checksum per le frasi NMEA. Sto usando il seguente codice Java:Calcolo del checksum NMEA
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();
}
Questo codice è simile a molti altri esempi in giro per internet e tutto funziona bene fino a quando cerco una frase come questa ..
$PSRF101,-2686700,-4304200,3851624,96000,497260,921,12,3*1C
Questa frase è dal NMEA Reference Manual e quindi presumo che il checksum sia corretto. Ma quando lo calcolo, ottengo * 2F come checksum e non 1C.
Penso che questo sia dovuto ai valori negativi nella frase, ma non ho idea di come gestirli. Qualcuno ha un suggerimento?
Il segno '-' non fa differenza: il checksum sarebbe ancora' 2F' –
errato, ogni personaggio contribuisce. Se, tuttavia, rimuovi ENTRAMBI i trattini, sei in effetti XORing due volte ... che ti riporta dove eri. Rimuovere l'uno o l'altro assolutamente cambia il risultato. – Anders8