CRC8算法

版权布告:本文是视频博客作者的原始的文字。,不是博主答应,不得假设转载。。 https://blog.csdn.net/zjli321/article/details/52998468

1、 CRC8基准达到同次多项式

CRC-8       x8+x5+x4+1              0x31(0x131)
CRC-8       x8+x2+x1+1              0x07(0x107)
CRC-8       x8+x6+x4+x3+x2+x1       0x5E(0x15E)

注:由于绝顶同次多项式是1。,并在CRC8中计算指定遗传密码。,绝顶级别都不的运用。,
照着,在同次多项式记载中,去除绝顶状态。。

2、 伟德国际官网算法,说白了,它是用传阅XOR(XOR)与待反省的信息举行的。,
无论如何实行XOR的办法竟是在信息转会中。,高头等考虑的事转会、或许是低通道。。在附近的信息
高通图案,XOR从高信息开端。,人们称之为定单异或。;在附近的低信息头等
传动装置办法,XOR从低信息开端。,人们称之为干杯!次。。两种不同上的异或办法,
哪怕是类似于的同次多项式。,解散不同上的。。
下面是XOR示例的序列,以阐明已确定的计算:
同次多项式的使用:x8+x5+x4+1(二元系为:100110001)
计算本人八位位组:0x11(二元系为:00010001)
计算试图贿赂:
A、 由于XOR次,因而需求向左开动的信息是8位。,
换档后的信息是:0001 0001 0000 000
B、 特等行9-位异或(同次多项式9位),0001 0001 0000 0000,由于高9位。
最大相当数为0。,不需求XOR。,同样地,下二位同样0。,不需求实行XOR。。
处置后,信息是:1 0001 0000 0000;
C、 下本人绝顶状态是1。,XOR手感是要素的。

你可以从下面的计算进行中看出。,同次多项式的绝顶数是1。,当XOR信息绝顶级别为1时,,
XOR计算是要素的。,和异或后,绝顶水平为0。,绝顶状态为0。,下次不再需求XOR了。,
这需求指定遗传密码计算。,你可以移除绝顶的状态。,不需求XOR。,不可更改的的解散同上的。。
在附近的是你这么说的嘛!计算进行,造成指定遗传密码的办法列举如下:

unsignedchar cal_table_high_first(unsignedchar 代价)
{
    unsignedchar i, crc;

    crc = value;
    for (i=8; i>0; --i)
    { 
        if (华润) & 0x80)  
        {
        
            crc = (华润) << 1) ^ 0x31;        }
        else
        {
            
            crc = (华润) << 1);
        }
    }

    return crc;
}
是你这么说的嘛!指定遗传密码是计算一八位位组信息的CRC树或花草结果。,是否它是计算本人在上文中八位位组的CRC的树或花草结果,这是有点简略的。

的,率先计算第本人八位位组的CRC树或花草结果。,以后,主要的八位位组的CRC树或花草结果与第二的八位位组混合。,
在CRC计算以前可以举行XOR的值。,也会反复多个八位位组。,下面是多个八位位组。
校验码:

unsignedchar crc_high_first(unsignedchar *ptr, unsignedchar 莱恩)
{
    unsignedchar i; 
    unsignedchar crc=0x00while(伦)
    {
        crc ^= *ptr++;  for (i=8; i>0; --i)     
        { 
            if (华润) & 0x80)
                crc = (华润) << 1) ^ 0x31;
            else
                crc = (华润) << 1);
        }
    }

    return (华润)); 
}
是你这么说的嘛!CRC计算是纯布尔运算图案。,可以警告,所需的手术量也相当显赫。,每个八位位组

需求8个断定。、移位、或异或手感。可以运用查表的办法。,罕有的缩减了计算量。,乍计算
0x00~0xFF每个八位位组的crc校验树或花草结果,每个八位位组的CRC树或花草结果可以使后退的表中找到。,罕有的
缩减计算。
在这里有本人表格达到器。:
达到表对应同次多项式:0x31(同次多项式:x8+x5+x4+1,100110001))

void  create_crc_table(void)
    {
        unsignedshort i;
        unsignedchar j;

        for (i=0; i<=0xFF; i++)
        {
            if (0 == (i%16))
                printf("\n");

            j = i&0xFF;
            printf("0x%.2x, ", cal_table_high_first (j));  
        }
    }

表列举如下。:

staticconstunsignedchar crc_table[] =
{
    0x00,0x31,0x62,0x53,0xc4,0xf5,0xa6,0x97,0xb9,0x88,0xdb,0xea,0x7d,0x4c,0x1f,0x2e,
    0x43,0x72,0x21,0x10,0x87,0xb6,0xe5,0xd4,0xfa,0xcb,0x98,0xa9,0x3e,0x0f,0x5c,0x6d,
    0x86,0xb7,0xe4,0xd5,0x42,0x73,0x20,0x11,0x3f,0x0e,0x5d,0x6c,0xfb,0xca,0x99,0xa8,
    0xc5,0xf4,0xa7,0x96,0x01,0x30,0x63,0x52,0x7c,0x4d,0x1e,0x2f,0xb8,0x89,0xda,0xeb,
    0x3d,0x0c,0x5f,0x6e,0xf9,0xc8,0x9b,0xaa,0x84,0xb5,0xe6,0xd7,0x40,0x71,0x22,0x13,
    0x7e,0x4f,0x1c,0x2d,0xba,0x8b,0xd8,0xe9,0xc7,0xf6,0xa5,0x94,0x03,0x32,0x61,0x50,
    0xbb,0x8a,0xd9,0xe8,0x7f,0x4e,0x1d,0x2c,0x02,0x33,0x60,0x51,0xc6,0xf7,0xa4,0x95,
    0xf8,0xc9,0x9a,0xab,0x3c,0x0d,0x5e,0x6f,0x41,0x70,0x23,0x12,0x85,0xb4,0xe7,0xd6,
    0x7a,0x4b,0x18,0x29,0xbe,0x8f,0xdc,0xed,0xc3,0xf2,0xa1,0x90,0x07,0x36,0x65,0x54,
    0x39,0x08,0x5b,0x6a,0xfd,0xcc,0x9f,0xae,0x80,0xb1,0xe2,0xd3,0x44,0x75,0x26,0x17,
    0xfc,0xcd,0x9e,0xaf,0x38,0x09,0x5a,0x6b,0x45,0x74,0x27,0x16,0x81,0xb0,0xe3,0xd2,
    0xbf,0x8e,0xdd,0xec,0x7b,0x4a,0x19,0x28,0x06,0x37,0x64,0x55,0xc2,0xf3,0xa0,0x91,
    0x47,0x76,0x25,0x14,0x83,0xb2,0xe1,0xd0,0xfe,0xcf,0x9c,0xad,0x3a,0x0b,0x58,0x69,
    0x04,0x35,0x66,0x57,0xc0,0xf1,0xa2,0x93,0xbd,0x8c,0xdf,0xee,0x79,0x48,0x1b,0x2a,
    0xc1,0xf0,0xa3,0x92,0x05,0x34,0x67,0x56,0x78,0x49,0x1a,0x2b,0xbc,0x8d,0xde,0xef,
    0x82,0xb3,0xe0,0xd1,0x46,0x77,0x24,0x15,0x3b,0x0a,0x59,0x68,0xff,0xce,0x9d,0xac
};
用查表法计算CRC码。:
unsignedchar cal_crc_table(unsignedchar *ptr, unsignedchar 莱恩) 
{
    unsignedchar  crc = 0x00;

    while (伦)
    {
        crc = crc_table[crc ^ *ptr++];
    }
    return (华润));
}

3、 反序异或计算
ANXOR或XOR差别率先决议了,信息在右边的开动。
的,同次多项式信息位需求高和低反演。。
或同次多项式:x8+x5+x4+1(二元系为:100110001)作为本人容器:
则计算本人八位位组校验码列举如下:

unsignedchar cal_table_low_first(unsignedchar 代价)
{
    unsignedchar i, crc;

    crc = value;
for (i=8; i>0; --i)
    { 
        if (华润) & 0x01)  
            crc = (华润) >> 1) ^ 0x8C;
        else
            crc = (华润) >> 1);
    }

    return crc;
}

下去多八位位组伟德国际官网和CRC信息表达到,只需交换单八位位组计算的次那就够了。
计算办法可加工的。,在这里不再列出。。因而,只需在伟德国际官网中运用的同次多项式是明晰的。,高头等考虑的事反省
死气沉沉的低首检查?,CRC的初始代价是多少?,CRC的计算获得利益或财富罕有的简略。。

NameE-mailWebsiteComment

发表评论

电子邮件地址不会被公开。 必填项已用*标注