打印

关于crc12的效验问题

[复制链接]
2146|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
SPACEAKY|  楼主 | 2008-3-17 10:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/****************************************** 
CRC12校验函数  
输  入:        ptr需要进行校验的数据包首地址  
        len需要校验的数据包字节数  
输  出:        校验码; 
调  用:        无; 
被调用:        从机协议打包函数; 
功  能:        将一给定的数据包进行CRC12校验给调用者返回校验码  
******************************************/ 

unsigned int CRC12(unsigned char *ptr,unsigned char len) 

    unsigned char i; 
    unsigned char j; 
    j = 0; 

    while(len) 
    { 
        /*多项式除法*/ 
        if(*ptr & (0x80>>j))  //如果该位为1 
            crc |= 0x01;  //则在余数尾部添1否则添0 
        if(crc >= 0x1000) 
            crc ^= 0x180D; 
        crc <<= 1; 
        j++; 
        if(j == 8) 
        { 
            j = 0; 
            ptr++; 
            len--; 
        } 
    } 
    /*对后面添加的12个0做处理*/ 
    for(i=0; i<12; i++) 
    { 
        if(crc >= 0x1000) 
            crc ^= 0x180D; 
        crc <<= 1; 
    } 
    crc >>= 1; 
    return(crc); 



就是这个程序 前面的我都可以看懂,就是倒数第一行的程序crc >>= 1; 为什么最后要把crc向右移动一位呢?这样除以2的意思是什么呢?

相关帖子

沙发
hotpower| | 2018-12-30 00:52 | 只看该作者

使用特权

评论回复
板凳
airwill| | 2019-1-4 22:02 | 只看该作者
就是这么定义的算法呀, 只能服从

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

24

帖子

1

粉丝