BCC校驗(異或和校驗)


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

返回值為得出的校驗碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM