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 参考手册,所以我假设校验和是正确的。但是当我计算它时,我得到 *2F 作为校验和,而不是 1C。

我认为这是因为句子中的负值,但我不知道如何处理它们。有人有建议吗?

4

1 回答 1

8

假设和计算的校验和的差等于省略(或有一个额外的字符'3');所以我很想相信 NMEA 参考手册中的错误。

您可以尝试一些在线 NMEA 计算器来验证结果。
例如http://www.hhhh.org/wiml/proj/nmeaxor.html

于 2012-10-04T10:33:31.803 回答