打印

CRC16

[复制链接]
1799|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
icecoffelin|  楼主 | 2009-4-27 23:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 计算CRC码的步骤为:

预置16位寄存器为十六进制FFFF(即全为1)。称此寄存器为CRC寄存器; 
把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器; 
把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位; 
如果最低位为0:重复第3步(再次移位); 如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或; 
重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理; 
重复步骤2到步骤5,进行下一个8位数据的处理; 
最后得到的CRC寄存器即为CRC码。 
uint crc16b(uchar *p, uchar len)
{
uint crc,d;
uchar i,j;

crc = 0xffff;

for(i=0;i<len;i++)
    {
    d = (unsigned int)p;
crc = crc ^ d;
    for(j=0;j<8;j++)
        {
        if ( crc & 0x0001 )
                {
                crc >>= 1;
                crc ^= 0xA001;
                }
        else
                crc >>= 1;
        }
    }
d = crc>>8;
crc <<= 8;
crc = crc | d;
return crc;
}

相关帖子

沙发
ccxlslr| | 2009-11-2 20:44 | 只看该作者
各位高手!想问一下,这个正确吗?

我是说结果!我这儿有资料,不过有些互相矛盾的!

使用特权

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

本版积分规则

9

主题

19

帖子

0

粉丝