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;
}

 

posted on 2018-01-02 19:33  无果分飞  阅读(226)  评论(0编辑  收藏  举报

导航