编写一个CRC循环冗余校验码生成器。语言不限,界面清晰。具体内容请查看附件。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
int main()
{
int i, j, lenf, leng, k, h,len_ff1;
char f[100], g[100], comm[10], yu[100] = {0}, ff1[110] = {0};
while(printf("请输入命令:"),~scanf("%s", comm))//文件EOF结尾
{
if(!strcmp(comm, "f1"))
{
printf("请输入要发送的数据比特序列:\n");
scanf("%s", f);
printf("请输入生成多项式:\n");
scanf("%s", g);
lenf = strlen(f);
leng = strlen(g);
k = leng - 1;
strcpy(ff1, f);
for(i = 0; i < k; i++)
ff1[i+lenf] = '0';
ff1[lenf+k] = '\0';
len_ff1 = strlen(ff1);
i = 0;
while(len_ff1 - i >= leng)
{
for(j = 0; j < leng; j++, i++)
ff1[i] = (ff1[i] ^ g[j]) + '0';//^为异或运算
for(h = 0; h < len_ff1; h++)
if(ff1[h] != '0')
{
i = h;
break;
}
}
printf("生成的余数是:\n") ;
for(i = h; i < len_ff1; i++)
printf("%c",ff1[i]);
printf("\n");
printf("生成的接受端的数据比特序列:\n%s", f);
for(i = h; i < len_ff1; i++)
printf("%c",ff1[i]);
printf("\n");
}
/*
else
{
printf("请输入接受段的数据比特序列:\n");
scanf("%s", f);
printf("请输入生成多项式:\n");
scanf("%s", g);
leng = strlen(g);
lenf = strlen(f);
k = leng - 1;
strcpy(ff1, f);
for(i = 0; i < k; i++)
ff1[i+lenf] = '0';
ff1[lenf+k] = '\0';
i = 0;
while(len_ff1 - i >= leng)
{
for(j = 0; j < leng; j++, i++)
ff1[i] = (ff1[i] ^ g[j]) + '0';
for(h = 0; h < len_ff1; h++)
if(ff1[h] != '0')
{
i = h;
break;
}
}
printf("生成的余数是:\n");
printf("发送的数据比特序列是:\n");
}*/
//f2
}
return 0;
}