Vinge 发表于 2009-10-12 18:22

正向和逆向crc的问题

今日遇到一个需要crc计算的地方,于是找crc函数,发现如后付的两个crc函数。可是我喂给他们同样的数据却得到不同的结果
我对比以前找到的其他函数,正向计算的结果互相一致,逆向计算的结果也互相一致。
想请教,如果我发的数据相同,比如我现在通过串口发送的序列0xaa0xaa 0x7e 0x01,公式ccitt 即多项式为1021(逆向后为8048)
是否他们计算的结果确实是不一致的,还是他们应该算出一致的结果来?

crc16l算出0xc3f7
crc16r算出0x7963
//-------------------------------------------------------------------------------------------------------------------------
网页摘来的函数
u_short crc16l(u_char *ptr,u_char len,u_short key)      // ptr 为数据指针,len 为数据长度
{
u_char i;
u_short crc=0x0000;
while(len--)
{
for(i=0x80; i!=0; i>>=1)
{
   if((crc&0x8000)!=0) {crc<<=1; crc^=key;}         
    else crc<<=1;                     
    if((*ptr&i)!=0) crc^=key;                        
}
ptr++;
}
return(crc);
}



!反转多项式是指在数据通讯时,信息字节先传送或接收低位字节,如重新排位影响 CRC
计算速度,故设反转多项式。!如CRC161021的反转多项式是8408



u_short crc16r(u_char *ptr, u_char len,u_short key)
{
unsigned char i;
u_short crc=0x0000;
while(len--!=0)
{
for(i=0x01;i!=0;i <<= 1)
{
   if((crc&0x0001)!=0) {crc >>= 1; crc ^= key;}
   else crc >>= 1;
   if((*ptr&i)!=0) crc ^= key;
}
ptr++;
}
return(crc);
}

Vinge 发表于 2009-10-13 09:00

自己顶一下,望高手指教!

我愿为你匍匐一生 发表于 2024-02-29 11:13

页: [1]
查看完整版本: 正向和逆向crc的问题