8_t pbuf[], uint8_t num) { int i, j; uint16_t wcrc = 0xffff; for (i = 0; i < num; i++) { wcrc ^= (uint16_t)(pbuf[i]); for (j = 0; j < 8; j++) { if (wcrc & 0x0001) { wcrc >>= 1; wcrc ^= 0xa001; } else wcrc >>= 1; } } return wcrc; ...
gcc -o crc_example crc_example.c ./crc_example 运行后,你应该会看到类似以下的输出: text CRC: 0x31C3 这个输出表示给定数据的CRC校验码是0x31C3。你可以使用在线CRC计算器或其他工具来验证这个结果的正确性。 通过以上步骤,你可以验证你的CRC校验码计算函数是否工作正常。如果有任何问题,可以检查算法实现...
这里直接说实现,首先使用在线生成工具,得到一个VHDL或者Verilog的CRC校验源码。 然后对下载的代码进行一些改动即可。这里直接给出最后实现的C代码。 #include<stdio.h>#defineint32_tsignedint#defineuint32_tunsignedint#defineuint8_tunsignedchar#defineGET_BIT_N_VAL(data,n)(0x1&((*((data)+(n)/8)&(0x...
for (i = 0; i < 8; i++) { if (crc & 0x0001) { crc >>= 1; crc ^= 0xA001; } else { crc >>= 1; } } } return crc; } 这个函数接受一个数据缓冲区data和数据长度len,并返回计算得到的CRC16校验值。 主要步骤如下: 初始化CRC寄存器为0xFFFF。 对每个字节进行异或运算。 对CRC寄存器...
CRC校验方法用C语言实现源代码 以下是一个使用C语言实现CRC校验方法的示例代码: ```c #include <stdio.h> #include <stdint.h> #define POLYNOMIAL 0x1021 // CRC-CCITT standard polynomial #define INITIAL_VALUE 0xFFFF // Initial value for CRC register uint16_t crc16(uint8_t *data, uint32_t ...
CRC校验方法用C语言实现源代码 下面是一个使用C语言实现CRC校验方法的源代码示例: ```c #include <stdio.h> unsigned long crc_table[256]; void generate_crc_tabl unsigned long crc; int i, j; for (i = 0; i < 256; i++) crc = i;...
校验码的计算多项式为:(X16 + X15 + X2 + 1)具体CRC16码的计算方法是:预置1个16位的寄存器为...
一份C代码搞定所有CRC---by Koomee 写在前面: CRC校验有很多种,有CRC4/5/6/7/8/16/32,每一种的多项式也有很多种变化, * 并不是一成不变的;主要有这几个参数决定计算方法 * 1>Poly:是多项式的值(Gx) * 2>Init: Init 的位数和Poly的位数相同,它的值为全0或者全F, ...
在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。CRC计算方法是:1、 预置1个16位的寄存器为十六进制FFFF(全1),此寄存器为CRC寄存器1 unsigned short wcrc = 0xFFFF; //16位CRC寄存器预置 2、 把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC...
计算到最后一位时即为整个二进制序列的余数,即为CRC校验码。该计算方法相当于对每一位计算,运算过程很容易理解,所占内存少,缺点是一位一位计算比较耗时。下面给出C语言实现方法:复制代码代码如下: unsignedchartest[16]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0x...