BCC校验(异或和校验)
生活随笔
收集整理的這篇文章主要介紹了
BCC校验(异或和校验)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
BCC(Block Check Character/信息組校驗碼),因校驗碼是將所有數(shù)據(jù)異或得出,故俗稱異或校驗。具體算法是:將每一個字節(jié)的數(shù)據(jù)(一般是兩個16進制的字符)進行異或后即得到校驗碼。
例如16進制數(shù)據(jù):01 A0 7C FF 02
計算:01 xor A0 xor 7C xor FF xor 02 = 20
校驗碼是:20
/********************************************************************
函數(shù)功能:異或和校驗
輸入?yún)?shù):命令字開始的位置
輸出參數(shù):
返 回 值:校驗碼
修改信息:
********************************************************************/
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] 長度轉(zhuǎn)成int
my_printf("data需校驗長度為:%d
",lenth);
while(lenth)
{
retval ^= *buf++;
--lenth;
}
my_printf("校驗和%x
",retval);
return retval; //返回值為校驗碼 放在最后一位
}
本例中傳入的數(shù)據(jù)data
data[2] data[3] 是后面跟著的數(shù)據(jù)域的長度
整個參與校驗的數(shù)據(jù)全部長度為lenth
返回值為得出的校驗碼
總結(jié)
以上是生活随笔為你收集整理的BCC校验(异或和校验)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用命令行使Windows进入睡眠或休眠
- 下一篇: ntohs的一个简单实现(将网络流中用两