crc_16.c

来自「国外网站上的一些精典的C程序」· C语言 代码 · 共 40 行

C
40
字号
#define POLY 0x8408/*//                                      16   12   5// this is the CCITT CRC 16 polynomial X  + X  + X  + 1.// This works out to be 0x1021, but the way the algorithm works// lets us use 0x8408 (the reverse of the bit pattern).  The high// bit is always assumed to be set, thus we only use 16 bits to// represent the 17 bit value.*/#include "crc.h"WORD crc16(char *data_p, WORD length){      unsigned char i;      unsigned int data;      unsigned int crc = 0xffff;      if (length == 0)            return (~crc);      do      {            for (i=0, data=(unsigned int)0xff & *data_p++;                 i < 8;                  i++, data >>= 1)            {                  if ((crc & 0x0001) ^ (data & 0x0001))                        crc = (crc >> 1) ^ POLY;                  else  crc >>= 1;            }      } while (--length);      crc = ~crc;      data = crc;      crc = (crc << 8) | ((data >> 8) & 0xff);      return (crc);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?