CRC32 算法学习笔记以及如何用jav a 实现 一:说明 二:基本概念及相关介绍 2.1 什么是CRC 在远距离数据通信中,为确保高效而无差错地传送数据,必须对数据进行校验即差错控制。循环冗余校验CRC(Cyclic Redundancy Check/Code)是对一个传送数据块进行校验,是一种高效的差错控制方法。 CRC 校验采用多项式编码方法。多项式乘除法运算过程与普通代数多项式的乘除法相同。多项式的加减法运算以2 为模,加减时不进,错位,如同逻辑异或运算。 2.2 CRC 的运算规则 CRC 加法运算规则: 0+0=0 0+1=1 1+0=1 1+1=0 (注意:没有进位) CRC 减法运算规则: 0-0=0 0-1=1 1-0=1 1-1=0 CRC 乘法运算规则: 0*0=0 0*1=0 1*0=0 1*1=1 一、循环冗余校验码(CRC) CRC 校验采用多项式编码方法。被处理的数据块可以看作是一个 n阶的二进制多项式,由 。如一个 8 位二进制数 10110101 可以表示为: 。多项式乘除法运算过程与普通代数多项式的乘除法相同。多项式的加减法运算以 2 为模,加减时不进,错位,和逻辑异或运算一致。 采用 CRC 校验时,发送方和接收方用同一个生成多项式 g(x ),并且 g(x )的首位和最后一位的系数必须为 1。CRC 的处理方法是:发送方以 g(x )去除 t(x ),得到余数作为 CRC 校验码。校验时,以计算的校正结果是否为 0 为据,判断数据帧是否出错。 CRC 校验可以 100%地检测出所有奇数个随机错误和长度小于等于k(k 为 g(x )的阶数)的突发错误。所以 CRC 的生成多项式的阶数越高,那么误判的概率就越小。CCITT 建议:2048 kbit/s 的 PCM 基群设备采用 CRC-4 方案,使用的 CRC 校验码生成多项式 g(x )= 。采用16 位CRC 校验,可以保证在 bit 码元中只含有一位未被检测出的错误 。在IBM 的同步数据链路控制规程SDLC 的帧校验序列FCS 中,使用CRC-16,其生成多项式g(x )= ;而在CCITT 推荐的高级数据链路控制规程HDLC 的帧校验序列FCS 中,使用CCITT-16,其生成多项式g(x )= 。CRC-32 的生成多项式g(x )= 。CRC-32 出错的概率比CRC-16 低 倍 。由于CRC-32 的可靠性,把CRC-32 用于重要数据传输十分合适,所以在通信、计算机等领域运用十分广泛。在一些 UART 通信控制芯片(如 MC6582、Intel8273 和 Z80-SIO)内,都采用了 CRC 校验码进行差错控制;以太网卡芯片、MPEG 解码芯片中,也采用CRC-32 进行...