#include <stdio.h>
#define ADDEDTERMINAL 12
int main()
{
int crc[13]={1,1,0,0,0,0,0,0,0,1,1,1,1};//常用crc码crc-12:生成多项式D12+D11+D3+D2+D+1
int send_data[5000],dtag=0,left[ADDEDTERMINAL],rtag=ADDEDTERMINAL,chushu[ADDEDTERMINAL+1],c,i,j,k,m;
printf("please input binary send_data:");
while((c=getchar())!='\n'){
send_data[dtag++]=c-'0';
}
for(i=0;i<ADDEDTERMINAL;i++)send_data[dtag++]=0;
for(i=0;i<dtag;i++)printf("%d",send_data[i]);
printf("\n");
for(i=0;i<=ADDEDTERMINAL;i++)chushu[i]=send_data[i];
m=ADDEDTERMINAL;
while(m<dtag){
j=0;
for(i=0;i<=ADDEDTERMINAL;i++){
chushu[j]=chushu[i]^crc[j];
j++;
}
for(i=0;i<j;i++){
if(chushu[i])break;
}
m+=i;
if(m>=dtag){
for(j=0;j<=ADDEDTERMINAL-i;j++)chushu[j]=chushu[j+i];
for(k=m-i+1;k<dtag;k++)chushu[j++]=send_data[k];
rtag=ADDEDTERMINAL-(ADDEDTERMINAL+1-i+dtag-(m-i)-1);
break;
}
for(j=0;j<=ADDEDTERMINAL-i;j++)chushu[j]=chushu[j+i];
k=1;
for(j=ADDEDTERMINAL-i+1;j<=ADDEDTERMINAL;j++){
chushu[j]=send_data[m+k-i];
k++;
}
}
j=0;
for(i=0;i<rtag;i++)left[j++]=0;
for(i=0;i<ADDEDTERMINAL-rtag;i++)left[j++]=chushu[i];
printf("the left is:");
for(i=0;i<ADDEDTERMINAL;i++)printf("%d",left[i]);
printf("\n");
for(i=0;i<ADDEDTERMINAL;i++)send_data[dtag-1-i]=send_data[dtag-1-i]^left[ADDEDTERMINAL-1-i];
printf("the right sending send_data is:");
for(i=0;i<dtag;i++)printf("%d",send_data[i]);
putchar(10);
printf("input sending send_data:");
dtag=0;
while((c=getchar())!='\n'){
send_data[dtag++]=c-'0';
}
for(i=0;i<=ADDEDTERMINAL;i++)chushu[i]=send_data[i];
m=ADDEDTERMINAL;
while(m<dtag){
j=0;
for(i=0;i<=ADDEDTERMINAL;i++){
chushu[j]=chushu[i]^crc[j];
j++;
}
for(i=0;i<j;i++){
if(chushu[i])break;
}
m+=i;
if(m>=dtag){
for(j=0;j<=ADDEDTERMINAL-i;j++)chushu[j]=chushu[j+i];
for(k=m-i+1;k<dtag;k++)chushu[j++]=send_data[k];
rtag=ADDEDTERMINAL-(ADDEDTERMINAL+1-i+dtag-(m-i)-1);
break;
}
for(j=0;j<=ADDEDTERMINAL-i;j++)chushu[j]=chushu[j+i];
k=1;
for(j=ADDEDTERMINAL-i+1;j<=ADDEDTERMINAL;j++){
chushu[j]=send_data[m+k-i];
k++;
}
}
j=0;
for(i=0;i<rtag;i++)left[j++]=0;
for(i=0;i<ADDEDTERMINAL-rtag;i++)left[j++]=chushu[i];
printf("the left is:");
for(i=0;i<ADDEDTERMINAL;i++)printf("%d",left[i]);
printf("\n");
for(i=0;i<ADDEDTERMINAL;i++)if(left[i])break;
if(i==ADDEDTERMINAL)printf("right\n");
else printf("wrong\n");
return 0;
}