📄 crccheckout_c++.cpp
字号:
#include<iostream.h>
#include<string.h>
char gx[5]={'1','1','0','0','1'}; //gx[5]中存放的是生成多项式
class CRC{
private:
char fx[81]; //fx[81]中存放的是要发送的比特序列
public:
CRC(){
cin>>fx;
}
char* calculate_rest(char* mesg);
void sender();
void interfere();
bool receiver();
};
char* CRC::calculate_rest(char* mesg) //crc_rest函数求余数并返回所求得的余数
{ //mesg用来接收比特序列
int len=strlen(mesg),i=0,j,k,m; //len表示接收到的比特序列的长度
char* rest=new char[5]; //rest中存放余数
//do{}while();语句求经过处理后比特序列的余数
while(i<len-4){
while(mesg[i]=='0')i++;
k=i; //i指示比特序列的第一个一的位置,k暂时记下i的值
for(j=0;j<5;j++){ //j控制异或运算的次数
if(mesg[k]!=gx[j])mesg[k]='1';
else mesg[k]='0';
k++;
}
i++;
}
for(m=0,i=len-4;i<len&&m<4;i++,m++)
rest[m]=mesg[i];
rest[4]='\0';
return rest;
}
void CRC::sender() //send()函数完成两件事:
{ //1、将要发送的比特序列左移 4 位
int i,len=strlen(fx); //2、生成带crc校验的比特序列
char* temp=new char[len+5]; //temp用来暂时存放message中的比特序列
char* rest=new char[5]; //rest用来存放余数
char* atemp=new char[5]; //atemp用来暂时存放四个“0”
strcpy(temp,fx);
for(i=0;i<4;i++)
atemp[i]='0';
atemp[4]='\0';
strcat(temp,atemp);
delete []atemp;
rest=calculate_rest(temp);
rest[4]='\0';
delete []temp;
cout<<"将要发送的比特序列的余数是:";
for(i=0;rest[i]=='0'&&i<4;i++);
if(i==4)
cout<<'0'<<endl;
else
for(i;i<4;i++)
cout<<rest[i];
cout<<endl;
strcat(fx,rest);
cout<<"这是带CRC校验的比特序列:"<<fx<<endl;
delete []rest;
}
void CRC::interfere() //interfere()函数完成对带crc校验的比特序列的干扰
{ //并返回干扰后的比特序列
int num; //num接收主函数传来的干扰位
cout<<"请输入干扰信号(即干扰第几位),所输的数大于 1 并小于 "
<<strlen(fx)<<"有效:";
cin>>num;
cout<<endl;
if(fx[num]=='1')
fx[num]='0';
else
if(fx[num]=='0')
fx[num]='1';
cout<<"这是经过干扰后比特序列:"
<<fx<<endl;
}
bool CRC::receiver() //判断接收到的比特序列余数是不是“0”,
{ //若是则返回1,若不是则返回0
char* rest=new char[5]; //rest用来存放余数
rest=calculate_rest(fx);
rest[4]='\0';
cout<<"经过干扰后的比特序列的余数是:";
for(int i=0;rest[i]=='0'&&i<4;i++);
if(i==4)
cout<<'0'<<endl;
else
for(i;i<4;i++)
cout<<rest[i];
cout<<endl<<endl;
for(i=0;i<4;i++)
if(rest[i]!='0'){
delete []rest;
return false;
}
delete []rest;
return true;
}
void main()
{
cout<<"请输入要发送的比特序列(0 或1):";
CRC object;
cout<<endl;
object.sender();
cout<<endl;
object.interfere();
if(object.receiver())
cout<<"您所输入的干扰无效,发送成功!"<<endl;
else
cout<<"您所输入的干扰有效,发送失败!"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -