uint16_t verify_crc16(unsigned char *chData,unsigned short uNo) { uint16_t crc=0xffff; uint16_t i,j; for(i=0;i<uNo;i++) { crc^=chData[i]; for(j=0;j<8;j++) { if(crc&1) { crc>>=1; crc^=0xA001; } else crc>>=1; } } return (crc); } /*********************************************************************************** * crc16校验值,分布校验,把校验值带入计算 * ***************************************************************************************/ uint16_t verify_crc16_continue(uint16_t crc,unsigned char *chData,unsigned short uNo) { //uint16_t crc=0xffff; uint16_t i,j; for(i=0;i<uNo;i++) { crc^=chData[i]; for(j=0;j<8;j++) { if(crc&1) { crc>>=1; crc^=0xA001; } else crc>>=1; } } return (crc); } uint16_t verify_crc16_uint32(uint16_t crc,uint32_t *chData,uint32_t uNo) { //uint16_t crc=0xffff; uint8_t array[4]; uint32_t i,j,k; for(i=0;i<uNo;i++) { memcpy(array,&chData[i],4); for(k=0;k<4;k++) { crc^=array[k]; for(j=0;j<8;j++) { if(crc&1) { crc>>=1; crc^=0xA001; } else crc>>=1; } } } return (crc); }
时间: 2023-08-01 15:13:41 浏览: 91
校验CRC16计算代码
5星 · 资源好评率100%
这段代码是关于 CRC16 校验的实现。它定义了三个函数:verify_crc16、verify_crc16_continue和verify_crc16_uint32。
- verify_crc16函数用于计算CRC16校验值。它接收一个unsigned char类型的数据指针chData和一个unsigned short类型的数据长度uNo作为参数。首先,它初始化crc为0xffff,然后对每个数据字节进行异或操作,并进行8次循环迭代,根据位运算和条件判断,更新crc的值。最后将crc作为校验结果返回。
- verify_crc16_continue函数与verify_crc16函数类似,区别在于它接收一个额外的crc参数,用于从上一次计算的结果开始继续计算CRC16校验值。
- verify_crc16_uint32函数用于计算32位数据的CRC16校验值。它接收一个uint32_t类型的数据指针chData和一个uint32_t类型的数据长度uNo作为参数。首先,它将每个uint32_t数据拆分成4个字节,并使用memcpy函数将其存储在array数组中。然后,对每个字节进行异或操作,并进行8次循环迭代,根据位运算和条件判断,更新crc的值。最后将crc作为校验结果返回。
这些函数使用了CRC16算法中的多项式0xA001进行计算。
阅读全文