Modbus crc16 纯计算校验谁有呀?不要查表的,空间不够了!
Modbus crc16 纯计算校验谁有呀?不要查表的,空间不够了!计算慢点不要紧,网上转了一圈都是 查表的。 uint16 GetCrc16(UCHAR *pucBuffer,uint16 wDataLength){
UCHAR ucHigh,ucLow,ucCrc16H,ucCrc16L;
UCHAR ucSaveH,ucSaveL;
int ii,ij;
ucCrc16H=0xFF;
ucCrc16L=0xFF;
ucLow=0x1;
ucHigh=0xA0;
for (ii=0;ii<wDataLength;ii++)
{
ucCrc16L=(ucCrc16L ^ pucBuffer);
for (ij=0;ij<8;ij++)
{
ucSaveH=ucCrc16H;
ucSaveL=ucCrc16L;
ucCrc16H=(ucCrc16H>>1);
ucCrc16L=(ucCrc16L>>1);
if ((ucSaveH & 0x01)==0x01)
{
ucCrc16L=(ucCrc16L | 0x80);
}
if ((ucSaveL & 0x01)==0x01)
{
ucCrc16H = (ucCrc16H ^ ucHigh);
ucCrc16L = (ucCrc16L ^ ucLow);
}
}
}
return(ucCrc16L + (ucCrc16H<<8)) ;
} ddddd120 发表于 2016-9-28 13:45
uint16 GetCrc16(UCHAR *pucBuffer,uint16 wDataLength)
{
UCHAR ucHigh,ucLow,ucCrc16H,ucCrc16L;
谢谢 查表也有很多种的,可以只查4位crc的表格,再加适量的运算 可以用半字节的查表呀,应该是最省空间和计算时间的方法
页:
[1]