1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 模拟实现CRC校验算法课程设计代码(C语言)

模拟实现CRC校验算法课程设计代码(C语言)

时间:2020-07-26 16:21:08

相关推荐

模拟实现CRC校验算法课程设计代码(C语言)

寰寰闲话:

相关原理解释csdn里面贼多,好多博主讲的贼棒,所以我就单纯就课程设计来说一说,所实现的功能分两部分就是得到CRC校验码的发送比特序列以及校验过程。所以在写的时候当成两个函数就好啦。话不多说,直接撸代码!

代码如下

#include <stdio.h>#include <math.h>int count(int);void sc();//生成函数bool jy();//校验函数int main(){printf("请输入你的选择:\n1--生成CRC校验码\n2--校验对错\n");int choose = 0;scanf("%d",&choose);switch (choose){case 1:sc();break;case 2:if(jy()){printf("传输过程正确\n");}else{printf("传输过程错误\n");}break;default:break;}return 0;}int count(int num)//计算位数{unsigned int a, b = 0; /*计算生成码的长度m*/a = num;do{a >>= 1;//每移一位,位数加1,直到最高位为0b++;} while (a != 0);return b;}void sc(){unsigned int gx, fx, m, n, z;printf("以下数据以十六进制计数方式输入\n");printf("请输入生成码的值:\n");scanf("%x", &gx);printf("请输入信息码的值:\n");scanf("%x", &fx);m = count(gx);//gx的位数n = count(fx);//fx位数fx <<= m - 1; /*信息码左移m-1位,求出扩展列,即fx*(gx的最高次幂的位数)*/unsigned int ffx;//拷贝一个fxffx = fx;for (int i = m + n - 1; i >= m; i--){if ((ffx >> (i - 1)) == 0)//相与直到为0continue;unsigned int tmp = 0xffffffff;//32位tmp <<= (32 - i);tmp >>= (32 - i); //高位清0ffx &= tmp; //保留ffx的低位ffx ^= (gx << (i - m));//减去是gx的位数}ffx &= (0xffffffff << 32 - (m - 1)) >> (32 - (m - 1)); //高位清0z = ffx | fx;printf("输出CRC校验码比特序列R(x)=0x%x", ffx);printf("\n");printf("输出带CRC校验码的发送数据比特序列为0x%x\n", z);}bool jy(){unsigned int gx, fx, m, n, z;printf("以下数据以十六进制计数方式输入\n");printf("请输入生成码的值:\n");scanf("%x", &gx);printf("请输入待校验数据:\n");scanf("%x", &fx);m = count(gx);n = count(fx);unsigned int ffx;ffx = fx;for (int i = n; i >= m; i--){if ((ffx >> (i - 1)) == 0)continue;unsigned int tmp = 0xffffffff;tmp <<= (32 - i);tmp >>= (32 - i); //高位清0ffx &= tmp; //保留ffx的低位ffx ^= (gx << (i - m));}if(ffx == 0){return true;}else{return false;}}

解释说明:想实现循环输入,在main函数里加个while(1)就好啦。校验函数里面的fx代表的意思就是待校验的CRC码,因为整个算法主要就是多项式除的过程,这里运用移位来进行模拟除的过程,就是这个算法,两个相除。

for (int i = m + n - 1; i >= m; i--){if ((ffx >> (i - 1)) == 0)//相与直到为0continue;unsigned int tmp = 0xffffffff;//32位tmp <<= (32 - i);tmp >>= (32 - i); //高位清0ffx &= tmp; //保留ffx的低位ffx ^= (gx << (i - m));//减去是gx的位数}

有需要的同学可以参考这个过程,进而写出符合要求的课程设计!有什么问题可以评论留言,再给大家解答,也可以关注一哈我?!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。