码迷,mamicode.com
首页 > 其他好文 > 详细

BCC校验(异或和校验)

时间:2020-02-26 19:12:55      阅读:1101      评论:0      收藏:0      [点我收藏+]

标签:lock   pre   数据   checkout   code   参数   char   --   block   

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

返回值为得出的校验码

 

BCC校验(异或和校验)

标签:lock   pre   数据   checkout   code   参数   char   --   block   

原文地址:https://www.cnblogs.com/qifeng1024/p/12368133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!