8

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が得られます。

これは文中の負の値によるものだと思いますが、どう対処すればいいのかわかりません。誰か提案がありますか?

4

1 に答える 1

8

想定されたチェックサムと計算されたチェックサムの差は、省略(または余分な文字「3」)に等しい。そのため、NMEAリファレンスマニュアルの誤りを信じたくなります。

オンラインのNMEA計算機を試して、結果を確認できます。
例:http ://www.hhhh.org/wiml/proj/nmeaxor.html

于 2012-10-04T10:33:31.803 に答える