发 帖  
原厂入驻New
[问答]

CRC-16算法求助!!

1403
分享
有字符数组假设为“0+3.14”
根据找的资料写程式如下:
unsigned char  j;
unsigned char len=strlen(CRC_Test);
unsigned char *ptr;
crc=0xFFFF;
ptr=CRC_Test;
while(len!=0)
{
  crc^=(*ptr);
  for(j=0;j<=7;j++)
  {
   
   IF((crc&0x0001)==1)
    {
     crc>>1;
     crc=crc^0xA001;
    }
   else
    crc>>1;
  }
  
  ptr++;
  len--;
}

把十六位的CRC值编码成ASCII码:
unsigned char character1,character2,character3;
character1=(unsigned char)(0x40|(crc>>12));
character2=(unsigned char)(0x40|((crc>>6)&0x3F));
character3=(unsigned char)(0x40|(crc&0x3F));

书上例题正确为0+3.14OqZ
但是我的出来的却是:0+3.14O|
为什么啊???
有些资料是说crc初始为0x0000,我有试过也没用~~

哪位大侠帮忙呗!!!万分感谢啊~!!!


0
2011-10-8 15:56:19   评论 分享淘帖 邀请回答
2个回答
2011-10-8 15:57:39 评论

举报

经高人指点现问题已解决~~
unsigned char  j;
unsigned char len=strlen(CRC_Test);
unsigned char *ptr;
crc=0x0000;
ptr=CRC_Test;
while(len!=0)
{
  crc^=(*ptr);
  for(j=0;j<=7;j++)
  {
   
   if((crc&0x0001)==1)
    {
     crc>>=1;
     crc=crc^0xA001;
    }
   else
    crc>>=1;
  }
  
  ptr++;
  len--;
}

已调试OK!!{:soso_e121:}
2011-10-9 14:12:07 评论

举报

只有小组成员才能发言,加入小组>>

375个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表