数据校验--BCC校验

BCC(Block Check Character/信息组校验码)即异或校验法
1、使用范围:适用于大多数要求不高的数据通讯。
2、应用场景:IC卡接口通讯、很多单片机系统的串口通讯都使用。
3、实现步骤:很多基于串口的通讯都用这种既简单又相当准确的方法。它就是把所有数据都和一个指定的初始值(通常是0)异或一次,最后的结果就是校验值,通常把它附在通讯数据的最后一起发送出去。接收方收到数据后自己也计算一次异或和校验值,如果和收到的校验值一致就说明收到的数据是完整的。
4、实验代码:

#include<stdio.h>

static unsigned char Fun_Bcc_Create(unsigned char *p1, unsigned short int len);
static unsigned char Fun_Bcc_Check(unsigned char *p1, unsigned short int len);
unsigned char Data_11B[11] = {0x10, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10};

/**
 *********************************************************************************
 * @file             main.c
 * @auther           li
 * @version          1.1.1
 * @data             2018-12-26 13:12:37
 * @brief            主函数
 * @param
 * @retval           none
 * @attention
 *********************************************************************************
*/
int
main(int argc, char **argv)
{
    printf("This is a BCC Data Check test!!!\r\n");

    Data_11B[10] = Fun_Bcc_Create(Data_11B, 10);

    if(Fun_Bcc_Check(Data_11B, 10) == Data_11B[10])
    {
        printf("Check is ok!!!\r\n");
    }
    else
    {
        printf("Check is err!!!\r\n");
    }

    while(1);
}

/**
 *********************************************************************************
 * @file             main.c
 * @auther           li
 * @version          1.1.1
 * @data             2018-12-26 13:12:37
 * @brief            函数功能: 生成 BCC
 * @param            p1:待生成校验数据的首地址
 *                  len:待生成校验数据长度
 * @retval           校验后的数据
 * @attention
 *********************************************************************************
*/
static unsigned char
Fun_Bcc_Create (unsigned char *p1, unsigned short int len)
{
    unsigned char bcc = 0;
    for(;len > 0; len--)
    {
        bcc ^= *p1++;
    }

    return bcc;
}

/**
 *********************************************************************************
 * @file             main.c
 * @auther           li
 * @version          1.1.1
 * @data             2018-12-26 13:12:37
 * @brief            函数功能: BCC 校验
 * @param            p1:待校验的数据首地址
                        len:待校验数据长度
 * @retval           校验后的数据
 * @attention
 *********************************************************************************
*/
static unsigned char
Fun_Bcc_Check(unsigned char *p1, unsigned short int len)
{
    unsigned char bcc=0;

    for(;len > 0; len--)
    {
        bcc ^= *p1++;
    }

    return bcc;
}


/** 实验结果
 **************************
 * This is a BCC Data Check test!!!
 * Check is ok!!!
 ***************************
 */
 

猜你喜欢

转载自blog.csdn.net/tyustli/article/details/85260753
今日推荐