Расчет по NMEA контрольная сумма
у меня проблема с вычислением контрольной суммы для предложений NMEA. Я использую следующий код java:
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();
}
этот код похож на многие другие примеры в интернете и все работает нормально, пока я не попробую такое предложение..
$PSRF101,-2686700,-4304200,3851624,96000,497260,921,12,3*1C
это предложение из справочное руководство NMEA и поэтому я предполагаю, что контрольная сумма будет правильной. Но когда я вычисляю его, я получаю *2F как контрольную сумму, а не 1С.
Я думаю, что это из-за отрицательных значений в предложении, но я понятия не имею, как с ними бороться. У кого-нибудь есть предложения?
1 ответов
разница между предполагаемой и рассчитанной контрольными суммами равна пропуску (или иметь дополнительный символ '3'); поэтому я бы соблазнился поверить в ошибку в справочном руководстве NMEA.
вы можете попробовать некоторые онлайн калькулятор NMEA для проверки результатов.
например http://www.hhhh.org/wiml/proj/nmeaxor.html