
求一个CRC校验C++源代码。题目:发送数据为1101011011,生成的多项式为P(X)=X4+X+1(X4为X的4次方),
1个回答
展开全部
下面的代码输入为原数据和多项式对就的二进制码,输出为产生的校验码。
如原数据是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题目时写的程序,希望对你有用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询