📄 crcgetcrc.c
字号:
/****************************************************************************************
*文件名:crcGetCrc.c COPYRIGHT(C) JINYANLAI
* All Rights Reserved
*说明:计算起始地址为ptr,长度为len的数组的CRC校验值。
=========================================================================================
*版本历史
=========================================================================================
*版本 *时间 *作者 *更改标记 *更改说明
*---- *---- *---- *------- *--------
* 0.1 *20061116 *敬恒 *无 *无
****************************************************************************************/
#include "includes.h"
#if USE_CRC_CCITT >= 1
#if USE_CRC_BITS >=1
INT16U crcGetCrc(INT8U *ptr, INT16U len)
{
INT8U i;
INT16U lu16CrcReg = 0x0; //CRC寄存器
while(len--)
{
for(i = 0x80; i != 0; i >>= 1)
{
if(lu16CrcReg & 0x8000) //CRC的bit15与输入的bit异或,
{ //为真则左移一位,然后与0x1021异或。
lu16CrcReg <<= 1; //为假则直接移位。此处程序将if(bit15^bit)
lu16CrcReg ^= 0x1021; //分解为if(bit15)和if(bit)两条语句。
} //两次异或保持数据不变。
else lu16CrcReg <<= 1;
if(i & *ptr) //if(bit)
{
lu16CrcReg ^= 0x1021;
}
}
ptr++;
}
return(lu16CrcReg);
}
#else //使用查表法
INT16U crcGetCrc(INT8U *ptr, INT16U len) //len的长度可以视情况增加为32位。
{
INT16U lu16CrcReg = 0x0;
while(len--)
{
lu16CrcReg = (lu16CrcReg << 8) ^ gu16CrcTable[(INT8U)(lu16CrcReg >> 8) ^ *ptr++];
}
return(lu16CrcReg);
}
#endif
#elif USE_CRC_32 >=1
#if USE_CRC_BITS >=1
INT32U crcGetCrc(INT8U *ptr, INT32U len)
{
INT8U i;
INT32U lu32CrcReg = 0x0; //CRC寄存器
while(len--)
{
for(i = 0x80; i != 0; i >>= 1)
{
if(lu32CrcReg & 0x80000000) //CRC的bit31与输入的bit异或,为真则左移一位,
{ //然后与0x04C11DB7异或;为假则直接移位。
lu32CrcReg <<= 1; //此处程序将if(bit31^bit)分解为if(bit31)和
lu32CrcReg ^= 0x04C11DB7; //if(bit)两条语句。两次异或保持数据不变。
}
else lu32CrcReg <<= 1;
if(i & *ptr) //if(bit)
{
lu32CrcReg ^= 0x04C11DB7;
}
}
ptr++;
}
return(lu32CrcReg);
}
#else
INT32U crcGetCrc(INT8U *ptr, INT32U len)
{
INT32U lu32CrcReg=0x0;
while(len--)
{
lu32CrcReg = (lu32CrcReg << 8) ^ gu32CrcTable[(INT8U)(lu32CrcReg >> 24) ^ *ptr++];
}
return(lu32CrcReg);
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -