8位crc的信息位检验位均为多少,CRC8算法疑问
来源:整理 编辑:亚灵电子网 2023-08-13 23:54:15
1,CRC8算法疑问
信息大,会分段传输,每段都有自己的crc校验,然后在接收方组合。crc相同的情况叫做crc碰撞,由于crc只有8位,所以发生碰撞的概率比较高,所以一般需要安全性比较高的地方都是用md5或sha1校验的。
2,关于CRC检错 计算 菜鸟级 会的来讲讲
计算CRC码的步骤为:(1).预置16位寄存器为十六进制FFFF(即全为1)。称此寄存器为CRC寄存器;(2).把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器;(3).把CRC寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位(注意:这时的最低位指移位前的最低位,不是移位后的最低位);(4).如果最低位为0:重复第3步(再次移位)如果最低位为1:CRC寄存器与多项式A001H(1010000000000001B)进行异或;(5).重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;(6).重复步骤2到步骤5,进行下一个8位数据的处理;(7).最后得到的CRC寄存器即为CRC码。
3,8位crc
#define POLY (0x1070 << 3)u8 crc8(u16 data) int i; for(i = 0; i < 8; i++) if (data & 0x8000) data = data ^ POLY; data = data << 1; } return (u8)(data >> 8);}crc 中的生成多项式,是有很多标准的。其统一的规律是:最高位、最低位都为1。8位crc校验通常用的是crc-8,其生成多项式为:107h = 1 0000 0111b进行异或运算时,最高位,就算是移出去了,因此,只用 07h 进行异或计算即可。
4,如何计算CRC校验码
我先给你举个例子: 已知信息位为1100,生成多项式G(x) = x3+x+1,求CRC码。 M(x) = 1100 M(x)*x3 = 1100000 G(x) = 1011 M(x)*x3 / G(x) = 1110 + 010 /1011 R(x) = 010 CRC码为: M(x)*x 3+R(x)=1100000+010 =1100010 其原理是:CRC码一般在k位信息位之后拼接r位校验位生成。编码步骤如下: (1)将待编码的k位信息表示成多项式 M(x)。 (2)将 M(x)左移 r 位,得到 M(x)*xr 。 (3)用r+1位的生成多项式G(x)去除M(x)*xr 得到余数R(x)。 (4)将M(x)*xr 与R(x)作模2加,得到CRC码。
5,如何计算CRC校验位
在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。 CRC计算方法是: 1、 加载一值为0XFFFF的16位寄存器,此寄存器为CRC寄存器。 2、 把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的相异或,异或的结果仍存放于该CRC寄存器中。 3、 把CRC寄存器的内容右移一位,用0填补最高位,并检测移出位是0还是1。 4、 如果移出位为零,则重复第三步(再次右移一位);如果移出位为1,CRC寄存器与0XA001进行异或。 5、 重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理。 6、 重复步骤2和5,进行通讯信息帧下一个字节的处理。 7、 将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换 8、 最后得到的CRC寄存器内容即为:CRC校验码。
6,CRC校验码的计算问题
首先你应该知道一件事情,859D这里的”D”表示什么?生成多项式是10011B的”B”又表示什么?下面我来解释一下:”D”表示十进制”B”表示二进制”O”表示八进制”H”表示十六进制好了,这个我们知道了,那么下一步我们就是要把十进制的859化成二进制(859D).859D化成二进制为:1101011011.OK,生成多项式是二进制,我们就不用化了,是五位(10011).如果还要算校验位的话;我们就在1101011011后面加4位,比刚才生成多项式少1位.于是就成了11010110110000再去除于生成多项式(10011)求余数.101011010101后加5个0然后除110101,得出110111111001余数为1101,不足五位,添满五位成为01101于是含有crc校验码的实际发送数据的比特序列为10101101010101101
7,CRC码的运算
解决不了,给你例子你参考下
题目:当前信息码字为100100,多项式G(X)=X^3+X^2+1 实际传送的信息码为?
步骤:1、看多项式多少阶 就是X最大的那个次方(题目上就是3)
2、如果是n阶,就在原来的信息码字后面加上n个0得到字串A
题目上就是100100000
3、用多项式的系数对应生成字串B
题目中多项式G(X)=X^3+X^2+1
带系数x写法 G(X)=1*X^3+1*X^2+0*X^1+1*X^0
所以B就是1101
4、 按模2除法用A除以B(模2 除法就是加减都是异或运算)得到的余数就是crc的校验码
题目中算出余数就是001
5、实际传送的信息就是原来的信息码+上校验码
答案是100100001
文章TAG:
8位crc的信息位检验位均为多少信息 信息位 检验