我在计算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。
我认为这是由于句子中含有负值,但我不知道如何处理它们。有人有建议吗?