我用的是CRC-CCITT,16位的CRC校验。C程序如下: uint getcrc(uchar *s,uchar len) {   uint acc=0,i,j=0;   while(len--)    {      acc=acc^(*s++<<8);      for(i=0;i++<8;)         if(acc&0x8000)           acc=(acc<<1)^0x1021;         else           acc=acc<<1;    }   return(acc); } 我知道这个程序是正确的,编译链接都没错,也知道CRC校验的原理:就是把我发送的二进制序列左移16位除以0x11021(简记为0x1021)所得的16位余数。 但我要传送的数据定义:uint x=9876;再定义: uchar buf[MAXLEN]; uchar len; len=strlen(buf);          其中buf[0]=0x09;buf[1]=0x08;buf[2]=0x07;buf[3]=0x06; uint ecc; 调用:ecc=getcrc(buf,len); 当然ecc就是发送数据uint x=9876所对应的16位CRC码,调试后的结果是 0xA387. 但是   我不明白如果我用笔算这个结果是怎么得到的?要发送的数据应对应什么样的二进制序列,除以0x11021才得0xA387。我已经试了无数种,都不能得到,但又肯定这个软件实现的结果是正确的。    请问大侠,这个发送数据应对应的二进制序列是什么?     0000 1001 0000 0000 0000 0000 .......?
  |   
     
  
 |