奇偶校验

Posted Make a commitment to your own

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了奇偶校验相关的知识,希望对你有一定的参考价值。

华科的题很有深度啊,没有一点基础知识的话估计这个都是做不出来的吧。。

首先说一下什么是奇偶校验:

它是一种校验代码传输正确性的方法。

按照被传输的一组二进制代码数位中“1”的个数为奇数或者偶数来进行校验。

CPU读取存储的数据时,会把前八位存储的数据相加,看计算结果是否与校验位一致。一般校验位为最高位。

题目描述:对输入的一组字符串每一个字符进奇校验,最高位为校验位。输出结果并换行。

解题思路:

本质可以理解为一个简单的字符串处理问题,对于每一个字符串逐位处理字符。对于输入的字母视为ascii码,(最大127)所以只要str[1...7]保存原有数据即可

通过膜二的方式计算出二进制形式,最高位保留校验位,通过计算str[1..7]中1的个数修改str[0]中存放的数字,使得最后str[0..7]中存储的1的个数为奇数。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define N 200
 4 void print(char c)
 5 {
 6     int str[8];//str[0]为校验位
 7     int i=7;
 8     int count=0;
 9     while(c>0)
10     {
11         str[i]=c%2;
12         c=c/2;
13         i--;//倒着存,因为输出的时候高位在后面
14     }
15     while(i>=1)
16     {
17         str[i]=0;
18         i--;
19     }
20     for(i=1; i<8; i++)
21     {
22         if(str[i]==1)count++;//统计1的位数
23     }
24     if(count%2==0)str[0]=1;//若1的个数为偶数,最高位置1,否则置0
25     else str[0]=0;
26     for(i=0; i<8; i++)printf("%d",str[i]);
27     printf("\n");
28 }
29 int main()
30 {
31     char str0[100];
32     int len,i;
33     while(gets(str0))
34     {
35         len=strlen(str0);
36         for(i=0; i<len; i++)
37             print(str0[i]);
38     }
39     return 0;
40 }

 

以上是关于奇偶校验的主要内容,如果未能解决你的问题,请参考以下文章

FPGA/数字IC手撕代码6——数据奇偶校验

奇偶校验

奇偶校验

串口奇偶校验

常用校验码(奇偶校验,海明校验,CRC)学习总结

计算奇偶校验