मुझे एनएमईए वाक्यों के लिए चेकसम की गणना करने में समस्या है। मैं निम्नलिखित जावा कोड का उपयोग कर रहा:एनएमईए चेकसम गणना
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 से है और इसलिए मुझे लगता है कि चेकसम सही होगा। लेकिन जब मैं इसकी गणना करता हूं, तो मुझे चेकसम के रूप में * 2 एफ मिलता है और 1 सी नहीं।
मुझे लगता है कि यह वाक्य में नकारात्मक मूल्यों के कारण है, लेकिन मुझे कोई संकेत नहीं है कि उनके साथ कैसे निपटें। क्या किसी के पास कोई सुझाव है?
'-' संकेत कोई फर्क नहीं पड़ता: चेकसम अभी भी' 2F' –
गलत होगा, प्रत्येक वर्ण योगदान देता है। यदि, हालांकि, आप उन दोनों डैश को हटाते हैं जो आप प्रभावी रूप से दो बार कर रहे हैं ... जो आपको वापस ले जाता है जहां आप थे। एक या दूसरे को हटाकर परिणाम बदल जाता है। – Anders8