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