我在計算NMEA句子的校驗和時遇到了問題。我使用下面的Java代碼:NMEA校驗和計算
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 Reference Manual,所以我假設校驗和是正確的。但是當我計算它時,我得到* 2F作爲校驗和而不是1C。
我認爲這是因爲句子中的否定值,但我不知道如何處理它們。有人有建議嗎?
「-'符號沒有區別:校驗和仍然是」2F「 –
不正確,每個字符都有貢獻。但是,如果你刪除兩個破折號,你實際上是兩次異或,這會讓你回到原來的位置。刪除一個或另一個絕對會改變結果。 – Anders8