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

为该数据添加CRC码,并验证他的正确性,改动CRC码最后一位,验证他的正确性... 为该数据添加CRC码,并验证他的正确性,改动CRC码最后一位,验证他的正确性 展开
 我来答
小坏蛋宽guy
推荐于2018-04-06 · TA获得超过300个赞
知道小有建树答主
回答量:239
采纳率:66%
帮助的人:158万
展开全部

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

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

输入1101011011  10011

输出1110

#include <iostream>
#include <cstring>
#include <iomanip>
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:"<<endl;
     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<<endl;
}

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

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式