则,CRC16=(BYTE[n]×256^n+BYTE[n-1]×256^(n-1)+...+BYTE[1]×256+BYTE[0])×256^2/G17,即数据流左移16位,再除以生成多项式G17。 先变换BYTE[n-1]、BYTE[n-1]扩大后的形式, CRC16=BYTE[n]×256^n×256^2/G17+BYTE[n-1]×256^(n-1)×256^2/G17+...+BYTE[1]×256×256^2...
这样最后16位寄存器中的数据就是求得的16位CRC码。 代码实现如下: /* input: 1)data: data ptr in unsigned char type 2) data_len_bit: data len in bits output: crc: crc16 result */ unsigned short crc16(unsigned char* data, unsigned short data_len_bit) { int i; unsigned short crc; un...
crc16_table[i] = crc; } } uint16_t crc16(const void *data, size_t len) { const uint8_t *byte = data; uint16_t crc = 0xFFFF; while (len--) { crc = (crc >> 8) ^ crc16_table[(crc ^ *byte++) & 0xFF]; } return crc; } int main(int argc, char *argv[]) { int...
This * lookup table is calculated by the init_crc16_tab() routine, the first time * the CRC function is called. */ void init_crc16_tab( void ) { uint16_t i; uint16_t j; uint16_t crc; uint16_t c; for (i=0; i<256; i++) { crc = 0; c = i; for (j=0; j<8; ...
1、CRC16校验C语言程序源码 (附完整的可执行的C语言代码)/CRC16校验在通讯中应用广泛,这里不对其理论进行讨论,只对常见的2种/实现方法进行测试。方法一:查表法(256长度的校验表) 速度快,准确,但是对于单片机设备存储占用大,且校验表长度大,输入时容易出现错误。/ - POPULAR POLYNOMIALS -/ CCITT: x16 + x12 ...
计算FCS (CRC 16 CCITT)是一种用于检测数据传输中错误的校验算法。FCS代表帧检验序列(Frame Check Sequence),而CRC代表循环冗余校验(Cyclic Redundancy Check)。CRC 16 CCITT是一种特定的CRC算法,它使用16位的校验码。 CRC 16 CCITT算法通过对数据进行多项式除法来计算校验码。具体而言,它将数据看作一个二进制数,...
CRC16 C代码 //函数功能:计算CRC16 //参数1:*pData16位CRC校验数据, //参数2:nLength数据流长度 //参数3:init初始化值 //参数4:ptable16位CRC查找表 //逆序CRC计算 unsignedshortGetRevCrc_16(unsignedchar*pData,intnLength, unsignedshortinit,const unsignedshort*ptable) { unsignedshortcRc_16=...
crc16校验算法c语言 crc16校验算法c语言 crc16校验算法是一种常用的数据校验方法,它可以检测出数据传输或存储过程中的错误,并提供纠错的依据。crc16校验算法的原理是将待校验的数据看作一个多项式,用一个固定的生成多项式对其进行除法运算,得到的余数就是crc16校验码。生成多项式的选择会影响crc16校验算法的性能,...
CRC16常见的标准有以下几种,被用在各个规范中,其算法原理基本一致,就是在数据的输入和输出有所差异,下边把这些标准的差异列出,并给出C语言的算法实现。 CRC16_CCITT:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在前,高位在后,结果与0x0000异或。
shift = shift ^ POLY16; } return shift; } 2、查表法 static unsigned short ccitt_table[256] = { 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, ...