下面的代码输入为原数据和多项式对就的二进制码,输出为产生的校验码。
如原数据是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题目时写的程序,希望对你有用。