CRC16校验码如何计算
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CRC16校验码如何计算相关的知识,希望对你有一定的参考价值。
比如我有一个16进制只字符串
7E 00 05 60 31 32 33 要在末尾添加两个CRC16校验码 校验这7个16进制字符 请写出算法和答案
方法如下:
CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算 相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0), 之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。
1.设置CRC寄存器,并给其赋值FFFF(hex)。
2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。 3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。
4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。
5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。
6.重复第2至第5步直到所有数据全部处理完成。
7.最终CRC寄存器的内容即为CRC值。
CRC(16位)多项式为 X16+X15+X2+1,其对应校验二进制位列为1 1000 0000 0000 0101。
参考资料:http://baike.baidu.com/view/80377.htm#2
参考技术A首先G(X)=X3+X+1可以得出G(x)=1011[G(x)中的1就是二进制第0位为1,X就是第一位为1,没有X^2,所以第二位为0,X^3则第三位为1。所以就是1011]
M(x)=0011M(x)*x3=0011000
M(x)*x3/G(x)的余数是101所以R(X)=101
CRC码为:M(x)*x3+R(x)=0011000+010=0011010
在计算机网络通信中
运用CRC校验时相对于其他校验方法就有一定的优势。CRC可以高比例的纠正信息传输过程中的错误,可以在极短的时间内完成数据校验码的计算,并迅速完成纠错过程,通过数据包自动重发的方式使得计算机的通信速度大幅提高,对通信效率和安全提供了保障。由于CRC算法检验的检错能力极强,且检测成本较低,因此在对于编码器和电路的检测中使用较为广泛。
以上内容参考:百度百科-CRC
参考技术B CRC16区分很多种的呀,你要的是哪一种?"7E000560313233" (hex)
1 byte checksum 121
CRC-16 0xBD48
CRC-16 (Modbus) 0xBD53
CRC-16 (Sick) 0x64A4
CRC-CCITT (XModem) 0x5B3E
CRC-CCITT (0xFFFF) 0xAAF0
CRC-CCITT (0x1D0F) 0x434C
CRC-CCITT (Kermit) 0xA572
CRC-DNP 0xC9B2
CRC-32 0xA5F4B6BB
之前wengshl回答是
CRC-CCITT (XModem) 0x5B3E 参考技术C 1335545988980,999000. 参考技术D 校验的串呢? crc要根据你的串生成一个校验串的
以上是关于CRC16校验码如何计算的主要内容,如果未能解决你的问题,请参考以下文章