crc.c 代码语言:javascript 复制 /* *一口Linux *2021.6.21 *version: 1.0.0 */ #include "crc.h" #include <stdio.h> typedef enum { REF_4BIT = 4, REF_5BIT = 5, REF_6BIT = 6, REF_7BIT = 7, REF_8BIT = 8, REF_16BIT = 16, REF_32BIT = 32 }REFLECTED_MODE; uint32_t ...
CRC_Test crc16_DNP = { { 16, 0x3D65, 0x0000, true, true, 0xffff }, { 0x7bda, 0x0535, 0x08c4 } }; CRC_Test crc32 = { { 32, 0x04c11db7, 0xffffffff, true, true, 0xffffffff }, { 0x3fca88c5, 0xe0631a53, 0xa4051a26 } }; CRC_Test crc32_MPEG2 = { { 32, 0x4c11...
0x2c, 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee, 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1, 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73, 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49, 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37,...
在一些标准中,规定了初始值,则数据在进行上述二项式运算之前,需要先将要计算的数据与初始值的最低字节进行异或,然后再与多项式进行计算。 而在结果异或值不为零的情况下,则需要将计算得到的CRC结果值再与结果异或值进行一次异或计算,得到的最终值才是我们需要的CRC校验码。 这里可以看出,初始值与结果值的位数要求与...
最后得到余数C就是CRC校验值。注意余数位数必须比除数少1位,如果不够前面加0补齐。 如果数据的比对位为 1,就与 h(x) 进行异或运算然后向后移一位 如果数据的比对位为 0,就直接后移一位 直到剩余数据长度与标准相等。 经过运算后,最终得到的r是10001100,这就是 CRC 校验码。 1.5、生成多项式 注意: 位宽:文...
一文讲透CRC校验码-附赠C语言实例 一口君最近工作用到CRC校验,顺便整理本篇文章和大家一起研究。 一、CRC概念 1. 什么是CRC? CRC(Cyclic Redundancy Checksum)是一种纠错技术,代表循环冗余校验和。 数据通信领域中最常用的一种差错校验码,其信息字段和校验字段长度可以任意指定,但要求通信双方定义的CRC标准一致。
在C语言中,可以使用以下代码实现CRC16校验: #include <stdint.h> uint16_t crc16(uint8_t *data, uint32_t len) { uint16_t crc = 0xFFFF; uint8_t i; while (len--) { crc ^= *data++; for (i = 0; i < 8; i++) { if (crc & 0x0001) { ...
实现CRC算法的代码示例包括crc.c、crc.h和main.c文件,这些代码通过模2除法运算生成CRC值,确保数据的完整性。在实际应用中,需要注意CRC算法对特定数据流(如00H或FFH)的计算结果可能不一致,从而影响存储空间的初始化状态。总结,CRC校验码作为数据通信领域中的一种重要技术,通过多项式计算保证数据传输...
一份C代码搞定所有CRC---by Koomee 写在前面: CRC校验有很多种,有CRC4/5/6/7/8/16/32,每一种的多项式也有很多种变化, * 并不是一成不变的;主要有这几个参数决定计算方法 * 1>Poly:是多项式的值(Gx) * 2>Init: Init 的位数和Poly的位数相同,它的值为全0或者全F, ...
在CRC校验码中,信息字段和校验字段的长度可以任意选定,其基本概念包括多项式和二进制数的对应关系。多项式可以转换成二进制数,最高幂次对应最高位,以下各位对应多项式的各幂次。如生成多项式G(x)=x^4+x^3+x+1转换为二进制数码为11011。信息多项式C(x)如发送信息位1111,转换为数据多项式为x^3+...