crc16
来源:互联网 发布:阿里云备案地址 编辑:程序博客网 时间:2024/05/24 15:38
#include <cstdio>using namespace std;// x^16+x^12+x^5+1unsigned 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;}