CRC编码步骤

CRC编码步骤,第1张

CRC码一般在k位信息位之后拼接r位校验位旁闹生成。编码步骤如下:

例如:选择产生多项式为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)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12371740.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存