CRC-16校验

#define	uint32_t  	unsigned int
#define	uint16_t  	unsigned int
#define	uint8_t  	unsigned char

/**
  * @brief  计算byte校验
  * @param  CRC		CRC值
  * @param  Byte	要检验的byte
  * @retval CRC值
  */
uint16_t CRC_Byte(uint16_t CRC,uint8_t Byte)
{

	CRC=(uint16_t)(CRC^((uint16_t)Byte<<8));
	int i=0;
 	for(i=0;i<8;i++)
 	{
 		if((CRC&0x8000)==0x8000)
		{
			CRC=(CRC<<1)^0x1021;//多项式
		}
		else
		{
			CRC=CRC<<1;	
		}
	}

	return (uint16_t)(CRC&0xffff);
}

/**
  * @brief  CRC_16校验
  * @param  CRCArray	CRC数组
  * @param  Length		长度
  * @retval 校验结果
  */
uint16_t  CRC_16_Check (uint8_t *CRCArray,uint16_t Length) 
{ 
	//初始值
 	uint16_t CRC16=0x78;
 	int i=0;
 	for(i=0;i<Length;i++)
 	{
 		CRC16=CRC_Byte(CRC16,(uint8_t)CRCArray[i]);
	}
	return CRC16;
}

CRC-16校验_第1张图片CRC-16校验_第2张图片

你可能感兴趣的:(C/C++)