CRC校验算法是一种广泛应用于数据通信和存储领域的错误检测技术,它的全称为Cyclic Redundancy Check。该算法基于多项式除法原理,通过计算数据的校验码,确保数据在传输或存储过程中未发生错误。CRC的核心思想是生成一个简短的固定位数的校验码,这个校验码是根据原始数据计算出来的,并附加到数据后面。接收方收到数据后,会重新计算校验码并与接收到的校验码进行比较,如果两者一致,则认为数据传输无误。 CRC的计算涉及几个关键参数,包括: 1. WIDTH:表示CRC值的位宽,如CRC-8表示生成的CRC为8位。 2. POLY:这是十六进制的多项式,通常省略最高位1,如x8 + x2 + x + 1,其二进制为100000111,转换为十六进制为0x07。 3. INIT:CRC的初始值,与WIDTH位宽相同。 4. REFIN:表示在计算前是否对原始数据进行翻转。 5. REFOUT:表示计算完成后是否对CRC值进行翻转。 6. XOROUT:计算结果与该值进行异或操作得到最终的CRC值。 在实际计算CRC时,首先确定这些参数。例如,对于CRC-8/MAXIM参数模型,假设原始数据为0x34,多项式为0x31。如果REFIN为true,那么需要先对原始数据进行翻转,再进行其他步骤。在CRC8的计算过程中,当遇到1时才进行异或,而不是1就简单地移位。 CRC的计算通常包括以下几个步骤: 1. 如果REFIN为true,原始数据先进行位翻转。 2. 原始数据左移至与WIDTH相匹配的位数,高位补零。 3. 将处理后的数据与多项式进行模2除法,取余数。 4. 余数与XOROUT进行异或。 5. 如果REFOUT为true,将结果进行位翻转,得到最终的CRC值。 CRC8是CRC的一种变体,用于8位数据的校验。它的校验原理与CRC基本相同,但可能有不同的多项式、初始化值和其他参数。CRC8在数据传输中有着广泛的应用,因为它计算简单,对传输错误有较高的检测率。 CRC还可以扩展到CRC16和CRC32,分别用于16位和32位数据的校验。这些更复杂的CRC版本可以提供更强的错误检测能力,适用于更大的数据块。在C语言中实现CRC算法,可以通过宏定义或其他编程技巧来实现不同CRC参数模型的通用性和可移植性。 CRC校验算法是一种有效的错误检测机制,它利用多项式除法的原理生成校验码,确保数据在传输和存储过程中的完整性。通过理解CRC的参数模型和计算过程,开发者可以针对特定应用选择合适的CRC类型,并在C语言等编程环境中实现相应的算法。
2024-09-12 11:09:23 1.18MB
1
crc校验算法详解,英文版本的,可以自己对照了写程序。
2023-10-30 23:39:40 102KB crc校验
1
内容索引:Delphi源码,算法相关,算法,CRC  内含8位、16位、32位的CRC校验算法示例代码,生成多项式的值(多项式因子)    注意:CRC16是数据流的高位先计算,多项式因子不变   而CRC32和CRC8都是数据流的低位先计算,所以多项式因子的高/低位对调   比如CRC32由$04C11DB7变为$EDB88320,CRC8由$31变为$8C   16位CRC:按位计算,速度最慢,占用空间最少   注:数据流是高位先行      MCS51的CRC-16计算函数(多项式因子为$1021, 高位先行)   ; 调用:CRC16H/CRC16L=原CRC16值(16位,初始值为0
2023-06-06 10:50:45 173KB Delphi源代码 算法相关
1
C语言实现各种CRC算法。编译环境:VS2010。请参考我的博客https://blog.csdn.net/u013073067/article/details/86621770 分析代码
2022-10-13 19:33:09 552KB CRC
内含8位、16位、32位的CRC校验算法示例代码,生成多项式的值(多项式因子) 注意:CRC16是数据流的高位先计算,多项式因子不变 而CRC32和CRC8都是数据流的低位先计算,所以多项式因子的高/低位对调 比如CRC32由$04C11DB7变为$EDB88320,CRC8由$31变为$8C 16位CRC:按位计算,速度最慢,占用空间最少 注:数据流是高位先行 MCS51的CRC-16计算函数(多项式因子为$1021, 高位先行) ; 调用:CRC16H/CRC16L=原CRC16值(16位,初始值为0000h),A=待计算数据(8位) ; 结果:CRC16H/CRC16L=计算后的CRC16值(16位) 16位CRC:生成CRC16表(256项),用于快速查表计算 在程序初始化时就先调用,预先生成CRC16Tab[256]查表数据 MCS51的CRC-16快速查表计算函数 ; 要预先生成CRC16查表数据,起始地址CRC16Tab,按高/低字节顺序存放(512字节) ; 调用:CRC16H/CRC16L=原CRC16值(16位,初始值为0000h),A=待计算数据(8位) ; 结果:CRC16H/CRC16L=计算后的CRC16值(16位) MCS51的CRC-8快速查表计算函数 ; 要预先生成CRC8查表数据,起始地址CRC8Tab,按顺序存放(256字节) ; 调用:B=原CRC8值(8位,初始值为00h),A=待计算数据(8位) ; 结果:B=计算后的CRC8值(8位) …………
2022-06-12 19:33:46 17KB Delphi源码-算法相关
1
软件版本博图15. 本程序适用于一维数组长度不超过1000字节 CrcErr=16#0,CrcValue正常,CrcErr=16#8000,数组长度超过1000字节
2022-03-19 21:15:59 532KB CRC 校验 modbus
1
该工具库代码符合MISRA-C2004规范,特别适用于资源紧张、无FPU的嵌入式平台,实现效率高,接口定义清晰,注释清晰,是可通用的工具库,包括如下: 1、atan2_tab.h atan2的查表法实现 2、convertor.h 支持整数、浮点与字节数组的互相转换,支持大小端设定 3、crc.h 包含crc16-ccitt和crc32的算法实现 4、fifo.h 参考linux kernel的kfifo的实现,无锁读写,效率高 5、math_fast.h 开根号sqrt的快速算法实现
1
详细说明了CRC校验的数学推导公式,安位计算CRC,安字节计算CRC及安半字节计算CRC说明
2021-12-27 14:27:43 434KB CRC
1
控制台应用程序,包含源代码 打开控制台应用程序,输入CRC校验字符,回车, 可计算出所以类型的CRC校验码,总有一种适合您
2021-10-16 18:54:50 86KB C# CRC 校验
1
CRC校验算法(包含8位16位32位),内有详细中文注释,以及含有某系列单片机的CRC的汇编代码!!值得收藏!!
2021-10-08 11:36:06 131KB 控件 源码 计数类 资源
1