用C++实现CRC校验
在网上看了很多CRC校验代码,有很多需要付费才能查阅。本着学习的态度自己简单写了一下,测试后没有发现问题,写在这里总结一下。
使用C++实现,IDE为codeblocks,结构较简单,欢迎大佬指点,不喜勿喷
代码如下:
#include<iostream>
using namespace std;
void FCS()
{
const int chushu[4]= {1,1,0,1};
const int chushu_2[4]= {0,0,0,0};
int length;
cout<<"输入原数据长度 :";
cin>>length;
int shuju[length+3];
cout<<"输入原数据"<<endl;
for(int i=0; i<length; i++)
{
cin>>shuju[i];
}
for(int i=length; i<length+3; i++)
{
shuju[i]=0;
}
//模二运算除法
int mid[4];
for(int i=0; i<3; i++)
{
mid[i]=shuju[i];
}
for(int i=3; i<length+3; i++)
{
mid[3]=shuju[i];
//用于检查除法中是否出现错误
/*
for(int x=0; x<4; x++)
{
cout<<mid[x];
}
cout<<"------------------------------"<<endl;
*/
int k=0;
if(mid[0]==1)
{
for(int j=1; j<4; j++)
{
if(mid[j]==chushu[j])
mid[k]=0;
else
mid[k]=1;
k++;
}
}
else
{
for(int j=1; j<4; j++)
{
if(mid[j]==chushu_2[j])
mid[k]=0;
else
mid[k]=1;
k++;
}
}
}
cout<<"FCS为:";
for(int i=0; i<3; i++)
{
cout<<mid[i];
}
cout<<endl;
cout<<"计算已完成"<<endl;
}
void CRC()
{
const int chushu[4]= {1,1,0,1};
const int chushu_2[4]= {0,0,0,0};
cout<<"输入待检验数据长度:";
int length;
cin>>length;
int daishuju[length];
cout<<"请输入待检验数据:";
for(int i=0;i<length;i++)
{
cin>>daishuju[i];
}
//模二运算除法
int mid[4];
for(int i=0; i<3; i++)
{
mid[i]=daishuju[i];
}
for(int i=3; i<length; i++)
{
mid[3]=daishuju[i];
//用于检查除法中是否出现错误
/*
for(int x=0; x<4; x++)
{
cout<<mid[x];
}
cout<<"------------------------------"<<endl;
*/
int k=0;
if(mid[0]==1)
{
for(int j=1; j<4; j++)
{
if(mid[j]==chushu[j])
mid[k]=0;
else
mid[k]=1;
k++;
}
}
else
{
for(int j=1; j<4; j++)
{
if(mid[j]==chushu_2[j])
mid[k]=0;
else
mid[k]=1;
k++;
}
}
}
int judge=0;
cout<<"校验结果为:";
for(int i=0; i<3; i++)
{
cout<<mid[i];
if(mid[i]!=0)
{
judge=1;
break;
}
}
cout<<endl;
if(judge==0) cout<<"CRC校验完成,未发现错误"<<endl;
else cout<<"CRC校验出错,该数据帧有差错"<<endl;
}
int main()
{
cout<<"请选择 1-----合成帧检验序列FCS 2-----CRC校验"<<endl;
int choose;
cin>>choose;
if(choose==1)
FCS();
else if(choose==2)
CRC();
else
cout<<"输入有误!!!"<<endl;
return 0;
}
运行结果如下
over