#include"stdio.h"
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
uint16_t CRC_Check(uint8_t* CRC_Ptr, uint8_t LEN);
void main(void)
{
uint16_t c = 0x0000;
uint8_t a = 0x05;
uint8_t b = 0x76;
uint16_t crc_val = 0;
uint8_t CRC[8] = {0x04,0x06,0x9C,0x43,0x03,0x00,0x5b,0x8e};
crc_val = CRC_Check(CRC,6);
printf("CRC_Value = %x\n",crc_val);
c = a;
c <<= 8;
c += b;
printf("a + b = %d" ,c);
}
uint16_t CRC_Check(uint8_t* CRC_Ptr, uint8_t LEN)
{
uint16_t CRC_Value = 0;
uint8_t i = 0;
uint8_t j = 0;
CRC_Value = 0xffff;
for (i = 0; i < LEN; i++)
{
CRC_Value ^= *(CRC_Ptr + i);
for (j = 0; j < 8; j++)
{
if (CRC_Value & 0x00001)
CRC_Value = (CRC_Value >> 1) ^ 0xA001;
else
CRC_Value = (CRC_Value >> 1);
}
}
CRC_Value = ((CRC_Value >> 8) + (CRC_Value << 8)); //交换高低字节
return CRC_Value;
}