#include <cstdio>
using namespace std;
// x^16+x^12+x^5+1
unsigned short crc16(unsigned char *ptr, int len)
{
unsigned short CRC = 0xFFFF; // vc++ sizeof(unsigned short) == 2
unsigned char j, tmp = 0;
int i;
for (i = 0; i < len; i++)
{
CRC ^= ptr[i];
for (j = 0; j < 8; j++)
{
tmp = CRC & 0x01;
CRC = CRC >> 1;
if (tmp)
CRC ^= 0xA001;
}
}
return ((CRC >> 8) + (CRC << 8)) & 0xffff;
}
int main(int argc, char* argv[])
{
unsigned char ptr[] = {0x01, 0x03, 0x0c, 0x43, 0x66, 0xcd, 0xc8, 0x40, 0x82, 0xdd, 0x6e, 0x44, 0x6b,0xf8, 0x45};
int len = sizeof(ptr);
printf("len=%d\n",len);
printf("crc = %x", crc16(ptr,len));
return 0;
}
crc16
最新推荐文章于 2024-05-31 00:12:45 发布