关于crc12的效验问题

[复制链接]
3055|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

粉丝
快速回复 在线客服 返回列表 返回顶部