2015-09-04 68 views
0

對不起,如果這聽起來很混亂,但我有一個GPS導航單元,通過UDP發送72字節的數據包。根據GPS手冊,72字節數據包的第22個字節是迄今爲止驗證數據包完整性的第一個校驗和。我被告知需要將前21個字節的值相加,並將該答案的最低字節與校驗和進行比較。如果這些值匹配,那麼數據包到目前爲止是有效的。獲取增加值的最低字節

要做到這一點,我寫C++代碼,添加第21個字節

checksum = ((unsigned char) buf[0] + (unsigned char) buf[1] + (unsigned char) buf[2] + (unsigned char) buf[3] + (unsigned char) buf[4] + (unsigned char) buf[5] + (unsigned char) buf[6] + (unsigned char) buf[7] + (unsigned char) buf[8] + (unsigned char) buf[9] + (unsigned char) buf[10] + (unsigned char) buf[11] + (unsigned char) buf[12] + (unsigned char) buf[13] + (unsigned char) buf[14] + (unsigned char) buf[15] + (unsigned char) buf[16] + (unsigned char) buf[17] + (unsigned char) buf[18] + (unsigned char) buf[19] + (unsigned char) buf[20] + (unsigned char) buf[21]) 

我的問題是:如何將我得到的這個最低的8位,所以我可以用字節22進行比較?

+0

您可以在C/C++中使用按位AND運算符。該運算符是'&'。爲了獲得最低8位,你可以用'0xff'和''校驗和。所以你可以在你的表達式末尾添加「&0xff」(在最後一個關閉圓括號之外) –

+0

謝謝!這很好用 – oodan123

+0

您是否考慮使用循環來獲取校驗和? 'checksum = 0; for(int i = 0; i <22; ++ i)checksum + =(unsigned char)buf [i];' – john

回答

0

感謝Micheal Petch的評論我只需要將值與0xff取得最低的8位。

& 0xff;