Tengo un problema con el cálculo de la suma de comprobación para las sentencias NMEA. Estoy utilizando el siguiente código de Java:Cálculo de suma 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();
}
Este código es similar a muchos otros ejemplos en todo el Internet y todo funciona bien hasta que intento una frase como esta ..
$PSRF101,-2686700,-4304200,3851624,96000,497260,921,12,3*1C
Esta frase es del NMEA Reference Manual y asumo que la suma de comprobación será correcta. Pero cuando lo calculo, obtengo * 2F como la suma de comprobación y no 1C.
Creo que esto se debe a los valores negativos en la oración, pero no tengo ni idea de cómo lidiar con ellos. ¿Alguien tiene una sugerencia?
El signo '-' no hace ninguna diferencia: la suma de comprobación seguiría siendo' 2F' –
Incorrecta, cada personaje contribuye. Sin embargo, si eliminas AMBOS de los guiones, estás en efecto XORing dos veces ... lo que te devuelve a donde estabas. Eliminar uno u otro absolutamente cambia el resultado. – Anders8