#include"stdio.h"
#include"crc.h"
/////////////////////////////////////////////////////////////////////////
//CDMA2000中的crc运算//////////////////
/////////////////////////////////////////////////////////////////////////
void cdmacrc16(int frame,int source)
//frame数据帧长,source输入数据形式
{
char crcreg[17]={'1','1','1','0','0','1','0','0','0','0','1','1','0','0','1','1','1'};
char crctemp[300];
int i,j;
FILE *sourcefile,*outfile;
if(source==0) //输入数据全零情况。
{
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]='0';
fputc(crctemp[i],outfile);
}
}
else if(source==1) //输入数据全一情况
{
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]='1';
fputc(crctemp[i],outfile);
}
}
else if(source==2) //从文本source.txt输入文件
{
sourcefile=fopen("source.txt","r");
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]=fgetc(sourcefile);
fputc(crctemp[i],outfile);
}
fclose(sourcefile);
printf("now read the file \n");
}
else if(source==3) //输入模板形式,但是该模板要存储在source.txt中
{
sourcefile=fopen("source.txt","r");
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]=fgetc(sourcefile);
if(crctemp[i]==EOF)
{
rewind(sourcefile);
crctemp[i]=fgetc(sourcefile);
fputc(crctemp[i],outfile);
}
else
fputc(crctemp[i],outfile);
}
fclose(sourcefile);
}
for(i=0;i<16;i++) //加零为crc运算准备
{
crctemp[frame+i]='0';
printf("add zeros \n");
}
for(i=0;i<frame;i++) //进行crc运算
{
if(crctemp[i]=='1')
{
for(j=0;j<17;j++)
{
if(crctemp[i+j]==crcreg[j])
crctemp[i+j]='0';
else
crctemp[i+j]='1';
}
printf("now crcing \n");
}
}
for(i=0;i<16;i++) //输出crc计算结果
{
fputc(crctemp[frame+i],outfile);
}
for(i=0;i<8;i++) //加尾比特
{
fputc('0',outfile);
}
fclose(outfile);
}
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
void cdmacrc12(int frame,int source)
//frame数据帧长,source输入数据形式
{
char crcreg[13]={'1','1','1','1','1','0','0','0','1','0','0','1','1'};
char crctemp[300];
int i,j;
FILE *sourcefile,*outfile;
if(source==0) //输入数据全零情况。
{
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]='0';
fputc(crctemp[i],outfile);
}
}
else if(source==1) //输入数据全一情况
{
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]='1';
fputc(crctemp[i],outfile);
}
}
else if(source==2) //从文本source.txt输入文件
{
sourcefile=fopen("source.txt","r");
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]=fgetc(sourcefile);
fputc(crctemp[i],outfile);
}
fclose(sourcefile);
printf("now read the file \n");
}
else if(source==3) //输入模板形式,但是该模板要存储在source.txt中
{
sourcefile=fopen("source.txt","r");
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]=fgetc(sourcefile);
if(crctemp[i]==EOF)
{
rewind(sourcefile);
crctemp[i]=fgetc(sourcefile);
fputc(crctemp[i],outfile);
}
else
fputc(crctemp[i],outfile);
}
fclose(sourcefile);
}
for(i=0;i<12;i++) //加零为crc运算准备
{
crctemp[frame+i]='0';
printf("add zeros \n");
}
for(i=0;i<frame;i++) //进行crc运算
{
if(crctemp[i]=='1')
{
for(j=0;j<13;j++)
{
if(crctemp[i+j]==crcreg[j])
crctemp[i+j]='0';
else
crctemp[i+j]='1';
}
printf("now crcing \n");
}
}
for(i=0;i<13;i++) //输出crc计算结果
{
fputc(crctemp[frame+i],outfile);
}
for(i=0;i<8;i++) //加尾比特
{
fputc('0',outfile);
}
fclose(outfile);
}
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
void cdmacrc10(int frame,int source)
//frame数据帧长,source输入数据形式
{
char crcreg[11]={'1','1','1','1','1','0','1','1','0','0','1'};
char crctemp[300];
int i,j;
FILE *sourcefile,*outfile;
if(source==0) //输入数据全零情况。
{
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]='0';
fputc(crctemp[i],outfile);
}
}
else if(source==1) //输入数据全一情况
{
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]='1';
fputc(crctemp[i],outfile);
}
}
else if(source==2) //从文本source.txt输入文件
{
sourcefile=fopen("source.txt","r");
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]=fgetc(sourcefile);
fputc(crctemp[i],outfile);
}
fclose(sourcefile);
printf("now read the file \n");
}
else if(source==3) //输入模板形式,但是该模板要存储在source.txt中
{
sourcefile=fopen("source.txt","r");
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]=fgetc(sourcefile);
if(crctemp[i]==EOF)
{
rewind(sourcefile);
crctemp[i]=fgetc(sourcefile);
fputc(crctemp[i],outfile);
}
else
fputc(crctemp[i],outfile);
}
fclose(sourcefile);
}
for(i=0;i<10;i++) //加零为crc运算准备
{
crctemp[frame+i]='0';
printf("add zeros \n");
}
for(i=0;i<frame;i++) //进行crc运算
{
if(crctemp[i]=='1')
{
for(j=0;j<11;j++)
{
if(crctemp[i+j]==crcreg[j])
crctemp[i+j]='0';
else
crctemp[i+j]='1';
}
printf("now crcing \n");
}
}
for(i=0;i<11;i++) //输出crc计算结果
{
fputc(crctemp[frame+i],outfile);
}
for(i=0;i<8;i++) //加尾比特
{
fputc('0',outfile);
}
fclose(outfile);
}
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
void cdmacrc8(int frame,int source)
//frame数据帧长,source输入数据形式
{
char crcreg[9]={'1','1','0','0','1','1','0','1','1'};
char crctemp[300];
int i,j;
FILE *sourcefile,*outfile;
if(source==0) //输入数据全零情况。
{
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]='0';
fputc(crctemp[i],outfile);
}
}
else if(source==1) //输入数据全一情况
{
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]='1';
fputc(crctemp[i],outfile);
}
}
else if(source==2) //从文本source.txt输入文件
{
sourcefile=fopen("source.txt","r");
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]=fgetc(sourcefile);
fputc(crctemp[i],outfile);
}
fclose(sourcefile);
printf("now read the file \n");
}
else if(source==3) //输入模板形式,但是该模板要存储在source.txt中
{
sourcefile=fopen("source.txt","r");
outfile=fopen("crc.txt","w");
for(i=0;i<frame;i++)
{
crctemp[i]=fgetc(sourcefile);
if(crctemp[i]==EOF)
{
rewind(sourcefile);
crctemp[i]=fgetc(sourcefile);
fputc(crctemp[i],outfile);
}
else
fputc(crctemp[i],outfile);
}
fclose(sourcefile);
}
for(i=0;i<8;i++) //加零为crc运算准备
{
crctemp[frame+i]='0';
printf("add zeros \n");
}
for(i=0;i<frame;i++) //进行crc运算
{
if(crctemp[i]=='1')
{
for(j=0;j<9;j++)
{
if(crctemp[i+j]==crcreg[j])
crctemp[i+j]='0';
else
crctemp[i+j]='1';
}
printf("now crcing \n");
}
}
for(i=0;i<8;i++) //输出crc计算结果
{
fputc(crctemp[frame+i],outfile);
}
for(i=0;i<8;i++) //加尾比特
{
fputc('0',outfile);
}
fclose(outfile);
}
///////////////////////////////////////////////////////////////////////////////////