数据校验--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);
static 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!!!
 ***************************
 */

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: LabVIEW是一种基于图形化编程环境的软件开发工具,用于数据采集、控制系统和实验室测量以及其他工程应用。BCC校验是一种二进制校验,用于检测数据在传输过程中的错误。 在LabVIEW中,我们可以使用内置的函数和工具来实现BCC校验。首先,我们需要将待发送的数据转换为二进制形式。然后,我们可以使用逻辑门函数来实现BCC校验BCC校验的原理是通过对数据进行异或运算来计算校验位。首先,将所有数据字节进行异或运算,得到一个校验字节。然后,将该校验字节添加到数据中,一起发送。 在LabVIEW中,我们可以使用逻辑门函数XOR来实现异或运算。我们将所有的数据字节输入到XOR函数中,并将其输出连接到校验位的输出。然后,我们可以将校验位添加到数据中,准备发送。 另外,在接收端,我们可以使用相同的方进行BCC校验。将接收到的数据字节输入到XOR函数中,并将其输出与接收到的校验位进行比较。如果两者相等,则说明数据在传输过程中没有发生错误。 总结来说,LabVIEW可以通过使用逻辑门函数实现BCC校验。通过将数据字节输入到XOR函数中进行异或运算,我们可以计算出校验位。在发送端,将校验位添加到数据中一起发送。在接收端,将接收到的数据字节和校验位输入到XOR函数中,进行比较来检测传输错误。这样可以保证数据在传输过程中的准确性。 ### 回答2: LabVIEW BCC校验是一种用于检测数据传输错误的校验BCC是“纵向冗余校验”的缩写,它通过对数据进行逐位异或操作来计算校验和。 LabVIEW BCC校验的原理是将要传输的数据的每一位与校验位进行异或操作,得到一个校验和。在接收端,将接收到的数据的每一位与校验位再进行异或操作,如果得到的结果为0,则说明数据传输没有错误。 具体的实现步骤如下: 1. 将要传输的数据划分为若干个字节,并按照字节顺序进行传输。 2. 在发送端,对每个字节进行异或操作,得到一个校验和。 3. 将校验和添加到发送数据的末尾。 4. 在接收端,对接收到的数据的每个字节进行异或操作,并将得到的结果与校验和进行比较。 5. 如果得到的结果与校验和相等,说明数据传输没有错误;否则,说明数据传输存在错误。 LabVIEW BCC校验简单且效率高,但存在一定的局限性,如只能检测单比特错误和偶数比特错误,对于其他错误类型无有效检测。因此,在进行数据传输时,建议结合其他校验,如CRC校验等,以提高校验的准确性和安全性。 ### 回答3: LabVIEW是一种基于图形化编程的软件开发平台,用于数据采集、控制系统和仪器交互等应用。BCC(Block Check Character)校验是一种用于检测数据传输错误的方。 在LabVIEW中,实现BCC校验可以通过以下步骤进行: 1. 首先,将要发送的数据分成若干块,并计算每个数据块的异或值。 2. 将计算得到的异或值作为BCC校验码添加到发送数据的末尾。注意,BCC校验码的计算不包括校验码本身,即不将BCC校验码计算在内。 3. 将包含BCC校验码的数据发送给接收端。 在接收端,进行BCC校验的步骤如下: 1. 接收到数据后,将除最后一个字节外的所有数据进行异或操作,得到接收数据BCC校验码。注意,不计算校验码本身。 2. 将计算得到的BCC校验码与接收数据的最后一个字节进行比较。 3. 如果两者相等,则说明数据传输没有错误;如果两者不相等,则说明数据传输存在错误。 通过实现这些步骤,LabVIEW可以通过BCC校验来检测数据传输过程中是否出现错误。这种校验简单有效,适用于大多数基本数据传输应用。但请注意,BCC校验不能纠正错误,只能检测错误的存在。如果需要更高的数据传输可靠性,可以考虑使用其他可纠错的校验,如CRC(循环冗余校验)。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值