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リファレンスマニュアルからのものであるため、チェックサムは正しいと思います。しかし、計算すると、1Cではなくチェックサムとして*2Fが得られます。
これは文中の負の値によるものだと思いますが、どう対処すればいいのかわかりません。誰か提案がありますか?