CRC校验
#include<iostream> #include<string.h> using namespace std; //二进制数的异或 //余数覆盖原本被除数的位置 void strxor(char p[], char m[],int n,int j) { int i = 0; for(i = 0; i < n + 1; i ++) { if(m[j] == p[i]) m[j] = '0'; else m[j] = '1'; j ++; } } void div(){ char Q[1000], R[1000];//Q:商 R:余数 char M[1000], P[1000];//M:被除数 P:除数 char result[1000]; cout<<"输入二进制序列和生成多项式(二进制):"<<endl; cin>>M>>P; //P的长度为length_P,在M后添加length_P-1个0 int length_M=strlen(M),length_P=strlen(P); for(int i=length_M;i<length_M+length_P-1;i++){ M[i]='0'; } M[length_M+length_P-1]='\0'; //判断被除数的最高位,若最高位为1,则商1,否则商0 //将上一次运算得到的余数覆盖原本被除数的位置,然后不断再除 for(int i=length_P-1;i<length_M+length_P-1;i++){ if(M[i-(length_P-1)]=='1'){ strxor(P,M,length_P-1,i-(length_P-1)); Q[i-(length_P-1)]='1'; } else { Q[i-(length_P-1)]='0'; } } Q[length_M]='\0'; cout<<"商为:"<<Q<<endl; int j=0; for(int i=length_M;i<length_M+length_P-1;i++){ R[j]=M[i]; j++; } R[length_P-1]='\0'; cout<<"余数:"<<R<<endl<<endl; } int main() { div(); return 0; }