crc16代码实现

本篇介绍crc16的代码实现与校验和的代码实现
如果对crc原理不太了解,请看上一篇的解释,本篇基于上一篇来进行讲解

发送端规定好数据格式,crc数据的位置(如放在结束符前)
假设数据格式为[head][len][data][crc][end]
head 1字节,len 2字节,
传输的两端,规定好要使用的crc多项式,crc的初始值,即可开始传输了
接收端收到数据后,再算一遍crc多项式,看和传输过来的crc是否一致

uint16_t get_crc16(uint16_t *data_ptr, uint16_t len)
{
	uint16_t crc16 = 0xffff;
	while(len > 0)
	{
		crc16 = crc16_table[*data_ptr^ (crc16>>8)]^(crc16<<8);
		data_ptr++;
		len--;
	}
	return crc16;
}

如果是串口传输数据,每次低字节数据在前,高位数据在后,所以应该使用如下代码
即2字节数据,低位高位

uint16_t get_crc16(uint16_t *data_ptr, uint16_t len)
{
	uint16_t crc16 = 0xffff;
	while(len > 0)
	{
		crc16 = crc16_table[*data_ptr^ (crc16 & 0xff)]^(crc16>>8);
		data_ptr++;
		len--;
	}
	return crc16;
}

你可能感兴趣的:(C,c语言)