⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc.txt

📁 将小于32位的码字用1011编程循环冗余码! 并且可以检验已编好的循环冗余码是否正确!
💻 TXT
字号:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

 void createCRC()
{int b[4],c[8],d[35],e[35];
char a[35],f[1];/*a字符串由用户输入需编辑的码字,b字符串表示生成多项式,由系统确定*/
int i,j,code=0,create=0,m,n,l,k,g;
printf("本系统的生成多项式为4位\n");
printf("请输入字长为小于32位的需编码码字:");
gets(f);
gets(a);
printf("将码字左移3位\n");
printf("%s\n",a);
for(i=0;i<32;i++)
if(a[i]!='1'&&a[i]!='0')break;
g=i-1;
for(i=0;i<=g;i++)
{a[i]=a[i]-48;
d[i]=a[i];
}
for(i=g+1;i<=g+3;i++)
a[i]=0;
for(i=g+3;i>=0;i--)
e[i]=a[i];
for(j=0;j<=g+3;j++)
printf("%d ",e[j]);
printf("\n");
b[0]=1;b[1]=1;b[2]=0;b[3]=1;
for(j=3;j>=0;j--)
printf("%d",b[j]);
printf("\n");

for(i=0;i<4;i++)
{e[i]=e[i]*pow(2,3-i);
 printf("%d ",e[i]);
 }
 printf("\n");
for(i=0;i<4;i++)
code=code+e[i];
printf("%d\n",code);
for(j=0;j<4;j++)
{b[j]=b[j]*pow(2,j);
}
for(j=3;j>=0;j--)
printf("%d ",b[j]);
printf("\n");
for(j=0;j<4;j++)
create=create+b[j];
printf("%d\n",create);
m=3;
do
{n=code^create;
printf("%d\n",n);
for(j=0;j<4;j++)
c[j]=0;
for(j=0;n!=0;)
  {c[j]=n%2;
  printf("%d ",c[j]);
  n=n/2;
  j++;
}
printf("\n");
  j=3;
while(c[j]==0)
 j--;
 if(j==3)
 {code=0;
 for(j;j>=0;j--)
 c[j]=c[j]*pow(2,j);
 for(j=3;j>=0;j--)
 code=code+c[j];
 printf("code1=%d\n",code);
}
 else
 {
 i=j;n=3-j;k=m;
 code=0;
 if(m+n<=g+3)
 {for(i;i>=0;i--)
 c[i]=c[i]*pow(2,i+n);
 for(j;j>=0;j--)
 code=code+c[j];
 printf("code2=%d\n",code);
for(j=m+n,l=n-1;j>m;j--,l--)
e[j]=e[j]*pow(2,n-1-l);
for(j=m+n;j>m;j--)
code=code+e[j];
printf("code3=%d\n",code);
}
else
{for(i;i>=0;i--,k--)
 c[i]=c[i]*pow(2,g+3-k);
 for(j;j>=0;j--)
 code=code+c[j];
 for(j=g+3,l=n-1;j>m;j--,l--)
{e[j]=e[j]*pow(2,n-1-l);
printf("%d ",e[j]);}
printf("\n");
for(j=g+3;j>m;j--)
code=code+e[j];
printf("code4=%d\n",code);
}
m=m+n;
}
}while(m<=g+3);
printf("%d\n",code);
for(j=0;j<4;j++)
c[j]=0;
for(j=0;code!=0;)
  {c[j]=code%2;
  code=code/2;
   printf("%d!!\n",code);
  j++;
}
for(i=0;i<3;i++)
printf("%d",c[i]);
printf("\n");
for(i=g+1,j=2;i<=g+3,j>=0;i++,j--)
d[i]=c[j];
printf("CRC编码结果为:\n");
for(i=0;i<=g+3;i++)
printf("%d",d[i]);
printf("\n");
}

void checkCRC()
{int b[4],c[8],d[35],e[35];
char a[35],f[1];/*a字符串由用户输入需编辑的码字,b字符串表示生成多项式,由系统确定*/
int i,j,code=0,create=0,m,n,l,k,g;
printf("请输入字长小于35位的CRC码码字:");
gets(f);
gets(a);
printf("%s\n",a);
for(i=0;i<35;i++)
if(a[i]!='1'&&a[i]!='0')break;
g=i-1;
for(i=0;i<=g;i++)
{a[i]=a[i]-48;
}
for(i=g;i>=0;i--)
e[i]=a[i];
for(j=0;j<=g;j++)
printf("%d ",e[j]);
printf("\n");
b[0]=1;b[1]=1;b[2]=0;b[3]=1;
for(j=3;j>=0;j--)
printf("%d",b[j]);
printf("\n");

for(i=0;i<4;i++)
{e[i]=e[i]*pow(2,3-i);
 printf("%d ",e[i]);
 }
 printf("\n");
for(i=0;i<4;i++)
code=code+e[i];
printf("%d\n",code);
for(j=0;j<4;j++)
{b[j]=b[j]*pow(2,j);
}
for(j=3;j>=0;j--)
printf("%d ",b[j]);
printf("\n");
for(j=0;j<4;j++)
create=create+b[j];
printf("%d\n",create);
m=3;
do
{n=code^create;
printf("%d\n",n);
for(j=0;j<4;j++)
c[j]=0;
for(j=0;n!=0;)
  {c[j]=n%2;
  printf("%d ",c[j]);
  n=n/2;
  j++;
}
printf("\n");
  j=3;
while(c[j]==0)
 j--;
 if(j==3)
 {code=0;
 for(j;j>=0;j--)
 c[j]=c[j]*pow(2,j);
 for(j=3;j>=0;j--)
 code=code+c[j];
 printf("code1=%d\n",code);
}
 else
 {
 i=j;n=3-j;k=m;
 code=0;
 if(m+n<=g)
 {for(i;i>=0;i--)
 c[i]=c[i]*pow(2,i+n);
 for(j;j>=0;j--)
 code=code+c[j];
 printf("code2=%d\n",code);
for(j=m+n,l=n-1;j>m;j--,l--)
e[j]=e[j]*pow(2,n-1-l);
for(j=m+n;j>m;j--)
code=code+e[j];
printf("code3=%d\n",code);
}
else
{for(i;i>=0;i--,k--)
 c[i]=c[i]*pow(2,g-k);
 for(j;j>=0;j--)
 code=code+c[j];
 for(j=g,l=n-1;j>m;j--,l--)
{e[j]=e[j]*pow(2,n-1-l);
printf("%d ",e[j]);}
printf("\n");
for(j=g;j>m;j--)
code=code+e[j];
printf("code4=%d\n",code);
}
m=m+n;
}
}while(m<=g);

if(code==0)printf("传输正确,可继续!\n");
else printf("传输有误!暂停传输!\n");
}
void main()
{int i,j;
do{
printf("******主菜单******\n");
printf("1.产生CRC编码\n");
printf("2.CRC码的检错\n");
printf("请选择:");
scanf("%d",&i);
switch(i){
case 1:createCRC();break;
case 2:checkCRC();break;
}
printf("按任意键继续,按0键推出系统\n");
scanf("%d",&j);
}
while(j!=0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -