求一个CRC校验C++源代码。题目:发送数据为1101011011,生成的多项式为P(X)=X4+X+1(X4为X的4次方),

2024-12-29 03:11:44
推荐回答(1个)
回答1:

下面的代码输入为原数据和多项式对就的二进制码,输出为产生的校验码。

如原数据是1101011011,多项式是X^4+X+1(即10011)。产生的校验码为1110。

输入1101011011  10011

输出1110

#include 
#include 
#include 
using namespace std;

#define WORDSIZE 255

int getNum(char a[], int n);
void showNum(int r, int n);

int main(int argc, char *argv[])
{
     cout<<"please input X and P:"<     int x, p, lenA, lenP;
     char a[WORDSIZE];
     memset(a, '\0', WORDSIZE);
     cin>>a;
     lenA = strlen(a);
     x = getNum(a, WORDSIZE);
     memset(a, '\0', WORDSIZE);
     cin>>a;
     lenP = strlen(a);
     p = getNum(a, WORDSIZE);

     x <<= lenP - 1;
     int result = 0, i;
     for (i = lenA - 1; i >= 0; i--) {
      if (x & (1 << (i + lenP - 1))) {
           result = result * 2 + 1;
           x ^= (p << i);
           
      } else {
           result = result * 2;
      }
     }
     showNum(x, lenP - 1);
     
     return 0;
}

int getNum(char a[], int n)
{
     int k = 0;
     int i;
     for (i = 0; i < n && a[i] != '\0'; i++) {
      k = k * 2 + a[i] - '0';
     }
     return k;
}

void showNum(int r, int n)
{
     int i;
     for (i = n - 1; i >= 0; i--) {
      if (r & (1 << i)) {
           cout<<1;
      } else {
           cout<<0;
      }
     }
     cout<}

这是以前自己偷懒做计算机网络CRC题目时写的程序,希望对你有用。