CRC校验详解:16位算法与计算步骤

需积分: 18 2 下载量 93 浏览量 更新于2024-09-09 收藏 42KB DOC 举报
"16位CRC校验是一种广泛应用于数据通信和存储系统中的错误检测方法。它基于一种称为循环冗余校验的算法,通过计算数据的校验码来检查数据传输或存储过程中的错误。本文主要关注的是16位CRC校验的原理和算法实现,而不涉及其纠错原理或生成多项式的选取原因。文章列举了一些常见的16位CRC生成多项式,并解释了在实际计算中如何忽略最高位的1。" CRC校验的核心在于使用一个预定义的生成多项式,它是一个二进制系数的多项式。例如,CRC-16-CCITT的生成多项式为0x11021,虽然通常表示时省略了最高位的1。16位CRC校验的过程可以分为人工笔算和计算机算法。 对于手动计算,以CRC-16-CCITT为例,假设我们有4字节的数据流,首先将数据左移16位,然后用生成多项式0x11021进行不借位除法(即按位异或)。得到的余数即为16位CRC校验码,这个校验码会附加到原始数据的末尾,形成新的6字节数据流用于传输。 计算机算法通常更加高效。其中一种比特型算法包括以下步骤: 1. 将扩展后的6字节数据流的高16位(即前两个字节)放入一个16位寄存器。 2. 检查寄存器的最高位,如果为1,则将寄存器左移1位,并与生成多项式的简记式异或。若最高位为0,则仅左移1位。 3. 这个过程不断重复,每次从下一个字节获取最低位,直到整个数据流都被处理。 4. 寄存器最后的值就是CRC校验码。 这种算法在计算机中实现时非常有效,因为它可以并行处理多个位,大大提高了计算速度。CRC-16-CCITT和其他列出的CRC-4, CRC-8, CRC-12, CRC-32c等都是根据各自的生成多项式执行类似的计算。 CRC校验在很多领域都有应用,如IBM的SDLC协议、ISO的HDLC帧结构、X.25网络协议、V.34调制解调器、PPP帧的FCS、ZIP和RAR文件压缩格式、以太网、FDDI和IEEE 1394等。它们通过生成特定长度的校验码来确保数据的完整性和正确性,从而在传输或存储过程中检测出潜在的错误。