BCC(Block Check Character/信息組校驗碼),因校驗碼是將所有數據異或得出,故俗稱異或校驗。具體算法是:將每一個字節的數據(一般是兩個16進制的字符)進行異或后即得到校驗碼。
例如16進制數據:01 A0 7C FF 02
計算:01 xor A0 xor 7C xor FF xor 02 = 20
校驗碼是:20
/******************************************************************** 函數功能:異或和校驗 輸入參數:命令字開始的位置 輸出參數: 返 回 值:校驗碼 修改信息: ********************************************************************/ u8 CheckOut(const void *data) { int lenth = 0; const u8 *buf = data; u8 retval = 0; lenth = 4 + (int)buf[3] + ((int)buf[2] * 256); //將buf[2] buf[3] 長度轉成int my_printf("data需校驗長度為:%d\r\n",lenth); while(lenth) { retval ^= *buf++; --lenth; } my_printf("校驗和%x\r\n",retval); return retval; //返回值為校驗碼 放在最后一位 }
本例中傳入的數據data
data[2] data[3] 是后面跟着的數據域的長度
整個參與校驗的數據全部長度為lenth
返回值為得出的校驗碼