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

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

#include #include 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,直到最高位为0 b++; } 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; //拷贝一个fx ffx = fx; for (int i = m + n - 1; i >= m; i--) { if ((ffx >> (i - 1)) == 0)//相与直到为0 continue; unsigned int tmp = 0xffffffff; //32位 tmp <<= (32 - i); tmp >>= (32 - i); //高位清0 ffx &= 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); //高位清0 ffx &= 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)//相与直到为0 continue; unsigned int tmp = 0xffffffff; //32位 tmp <<= (32 - i); tmp >>= (32 - i); //高位清0 ffx &= tmp; //保留ffx的低位 ffx ^= (gx << (i - m)); //减去是gx的位数 }

【模拟实现CRC校验算法课程设计代码(C语言)】有需要的同学可以参考这个过程,进而写出符合要求的课程设计!有什么问题可以评论留言,再给大家解答,也可以关注一哈我?!

    推荐阅读