CRC循环冗余校验计算(含c语言实现)

概述

使用生成多项式,将K位信息位经运算得到R位校验位,然后将K+R位一起传输给接收方。接收方根据生成多项式和接收到的K+R位数据,校验数据。若正确,取出数据位进行处理;若错误,提醒发送方重传。

计算过程

生成多项式:G(x)=X^4+X+1
信息位:10111
解题步骤:
1、化解生成多项式为10011(4次幂系数为1,3次幂系数为0,2次幂系数为0,1次幂系数为1,0次幂系数为1,所以化解生成多项式为10011),
2、信息位后加4个0(因生成多项式最高次幂为4),然后对10011做模二除运算(异或除法),如下图: 

异或相同为0,不同为1 

c语言实现过程

 

#include <stdio.h>
#include <stdint.h>
uint8_t crc(uint8_t * data,uint16_t len,uint8_t init)
{
	uint8_t proy=0x03;    /*多想去掉最高次幂系数*/
	uint8_t data1,data2;  /*把八位分成两个四位*/
	  
	while(len--)
	{
		uint8_t i;
		data1=((*data)&0xF0)>>4;   /*八位高位*/
		data2=((*data)&0x0F);         /*八位低位*/
		init^=(data1<<0);
		for(i=0;i<4;i++)
		{
			if(init&0x08)
			{
				init=((init<<1)&(0x0F))^proy;
			}
			else
			{
				init=(init<<1);
			}
		}
		init^=(data2<<0);
		for(i=0;i<4;i++)
		{
			if(init&0x08)
			{
				init=((init<<1)&0X0F)^proy;
			}
			else
			{
				init=(init<<1);
			}
		}
		data++;
		
	}
	return init;
}

测试

测试正确

会写四位就会写 crc8  crc16,crc32

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值