打印
[STM32F1]

奇偶校验

[复制链接]
266|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
定义
奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。

简单来说就是:

奇校验:使完整编码(有效位和校验位)中的"1"的个数为奇数个;
偶校验:使完整编码(有效位和校验位)中的"1"的个数为偶数个
#include<stdio.h>
#include<string.h>

unsigned char add(char data)//奇校验
{
    int i, cnt = 0;

    for (i = 0; i < 7; i++)//一个char型有7位
    {
        int temp = ((data >> i) & 1);//data >> i是向右移i个位置得到的值,((data >> i) & 1)是与1不同的个数
        cnt += temp;//cnt记录二进制下data中1的个数
    }

    unsigned char ans = data << 1;//左移1位
   
    if (cnt % 2 == 0)//当cnt能够被2整除,即cnt是偶数,即1的个数是偶数
    {
        ans += 1;//在最右边加1
    }
    else//当cnt不能够被2整除,即cnt是奇数,即1的个数是奇数
    {
        ans += 0;//在最右边加0
    }
    return ans;
}

unsigned char add_2(char data)//偶校验
{
    int i, cnt = 0;

    for (i = 0; i < 7; i++)//一个char型有7位
    {
        int temp = ((data >> i) & 1);//data >> i是向右移i个位置得到的值,((data >> i) & 1)是与1不同的个数
        cnt += temp;//cnt记录二进制下data中1的个数
    }

    unsigned char ans = data << 1;//左移1位
   
    if (cnt % 2 == 0)//当cnt能够被2整除,即cnt是偶数,即1的个数是偶数
    {
        ans += 0;//在最右边加0
    }
    else//当cnt不能够被2整除,即cnt是奇数,即1的个数是奇数
    {
        ans += 1;//在最右边加1
    }
    return ans;
}

int main()
{
    char a;
    unsigned char b;
    scanf("%c", &a);
    b = add(a);
    printf("2进制结果表示为:");//输出b的2进制表示
    for (int i = 7; i >= 0; i--) {
        if (((b>>i) & 1) == 1)
            printf("1");
        else
            printf("0");
    } putchar(10);

    printf("8进制结果表示为:%o\n",b);//输出b的8进制表示

    printf("10进制结果表示为:%d\n",b);//输出b的10进制表示

    printf("16进制结果表示为:%x\n", b);//输出b的16进制表示
   
    return 0;
}



使用特权

评论回复
沙发
tpgf| | 2024-1-18 16:26 | 只看该作者
现在单纯的奇偶校验是不是感觉不那么可靠了啊

使用特权

评论回复
板凳
keaibukelian| | 2024-1-18 20:55 | 只看该作者
现在我们常用的串口通讯使用的还是奇偶校验的校验方式

使用特权

评论回复
地板
heimaojingzhang| | 2024-1-18 21:31 | 只看该作者
请问什么叫做完整编码呢

使用特权

评论回复
5
guanjiaer| | 2024-1-18 22:07 | 只看该作者
奇偶校验的算法相对来说还是非常简单的

使用特权

评论回复
6
观海| | 2024-1-18 22:45 | 只看该作者
采用奇偶校验 出现相同校验码的情况多不多啊

使用特权

评论回复
7
八层楼| | 2024-1-18 23:23 | 只看该作者
奇偶校验是非常简单有效的校验方式

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

76

主题

500

帖子

0

粉丝