crc16.c

来自「很强的射频卡reader源代码」· C语言 代码 · 共 36 行

C
36
字号
#define CRC_A 1
#define CRC_B 2

unsigned short UpdateCrc(unsigned char ch, unsigned short *lpwCrc)
{
	ch = (ch^(unsigned char)((*lpwCrc) & 0x00FF));
	ch = (ch^(ch<<4));
	*lpwCrc = (*lpwCrc >> 8)^((unsigned short)ch << 8)^((unsigned short)ch<<3)^((unsigned short)ch>>4);
	return(*lpwCrc);
}
void ComputeCrc(int CRCType, char *Data, int Length,
			  unsigned char *TransmitFirst, unsigned char *TransmitSecond)
{
  unsigned char chBlock;
  unsigned short wCrc;
  switch(CRCType)
  {
	  case CRC_A:
			   wCrc =0x6363; /* ITU-V.41 */
			   break;
	  case CRC_B:
			   wCrc = 0xFFFF; /* ISO/IEC 13239 (formerly ISO/IEC 3309) */
			   break;
	  default:return;
  }
  do											
  {
	  chBlock = *Data++;
	  UpdateCrc(chBlock, &wCrc);
  } while (--Length);
  if (CRCType == CRC_B)
	 wCrc = ~wCrc; /* ISO/IEC 13239 (formerly ISO/IEC 3309) */
  *TransmitFirst = (unsigned char) (wCrc & 0xFF);
  *TransmitSecond = (unsigned char) ((wCrc >> 8) & 0xFF);
  return;
}

⌨️ 快捷键说明

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