我感觉这里缺少明显的东西,但是我已经在此浪费了太多时间。我正在使用以下命令获取NMEA句子的校验和:
String[] splitData = sentence.split("[,*]");
int i = 0;
for (char c : (sentence.substring(1, sentence.indexOf("*"))).toCharArray()) {
i = i ^ c;
}
String checksum = Integer.toHexString(i).toUpperCase();
if (!checksum.equals(splitData[splitData.length - 1].toUpperCase())) {
Log.d(getClass().getName(), "Checksum failed! Expected: " +
splitData[splitData.length - 1].toUpperCase() +
" Got: " + checksum);
}
这是Log输出:
NmeaParser: Checksum failed! Expected: 66 Got: 66
NmeaParser: Checksum failed! Expected: 1E Got: 1E
NmeaParser: Checksum failed! Expected: 2C Got: 2C
NmeaParser: Checksum failed! Expected: 53 Got: 53
NmeaParser: Checksum failed! Expected: 66 Got: 66
我尝试在两个比较过的字符串上使用toString()(我知道,这是多余的,但我很绝望)。我已经尝试了对两个String的trim()来摆脱任何未检测到的空格。我感到困惑。该代码似乎向前挺了,并且日志确认字符串相同。
那...我在这里想念什么?!?
答案 0 :(得分:2)
在if
之前写下:
String str = splitData[splitData.length - 1].toUpperCase();
然后记录str
和checksum
的长度
,以防万一2个字符中存在不可打印的字符