例如:选择产生多项式为1011,把4位有效信息1100编程CRC码.即G(X)= X^3+X+1=1011,M(x)=X^3+X^2=1100 。
(1)将待编码的k位信息表示成多项式 M(x)。 得到M(X)=1100,即M(x)=X^3+X^2=1100
(2)将 M(x)左移 r 位,得到 M(x)*xr 。则取稿孙r=3
M(X)*X^3=X^6+X^5=1100000
(3)用运敬罩r+1位的生成多项式G(x)去除M(x)*xr 得到余数R(x)。
则被除数为1100000,除数为1011,进行二进制除法,求得余数为010。
(4)将M(x)*xr 与R(x)作模2加,得到CRC码。则CRC校验码为1100010
#include <腊穗stdio.h>#include <string.h>
#include "stdlib.h"
unsigned int char2int(char *str)
{
unsigned int count=0, ret=0
for(count = 0count<strlen(str)count++)
{
ret = ret<<1
if('0' != str[count])
{ ret+=1}
}
return ret
}
unsigned int getR(char *str)
{
unsigned int c =0
int ret = strlen(str)-1
for(c=0c <strlen(str)c++)
{if(str[c] != '0')<br/> {return ret-c}
}
}
int getRi(unsigned int num)
{
int c =0
for(num != 0c++)
{num = num>>1}
return c
}
void CRC(char *scode, char *p, char*g )
{
unsigned int iP = char2int(p)
unsigned int iG = char2int(g)
unsigned int r= getR(g)
unsigned int code = iP <<r
unsigned int yx = code
for(getRi(yx) >隐逗= getRi(iG))
{ yx = yx ^ (iG<<(getRi(yx) - getRi(iG)))}
code += yx
itoa(code,scode,2)
}
void main() /灶局卖/定义主函数
{
char data[8]="" , bds[8]="",code[16]=""
printf("数据:")
scanf("%s", data)
printf("表达式:")
scanf("%s", bds)
CRC(code,data,bds)
printf("编码:%s",code)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)