C按位操作实现CRC计算算法
C按位操作实现CRC计算算法
CRC算法参数模型解释:
NAME:参数模型名称。
WIDTH:宽度,即CRC比特数。
POLY:生成项的简写,以16进制表示。例如:CRC-32即是0x04C11DB7,忽略了最高位的”1”,即完整的生成项是0x104C11DB7。
INIT:这是算法开始时寄存器(crc)的初始化预置值,十六进制表示。
REFIN:待测数据的每个字节是否按位反转,True或False。
REFOUT:在计算后之后,异或输出之前,整个数据是否按位反转,True或False。
XOROUT:计算结果与此参数异或后得到最终的CRC值。
模型数据结构定义
1 | typedef struct CRC8_TYPE{ |
按位计算算法大致流程
字节的左右反转
1 | uint32_t reflect_uint32_t_bits(uint32_t data){ |
CRC按位计算的两种方式(一般计算与反序计算)
1 | uint32_t crc32(uint8_t *data, uint32_t length, uint32_t crc_reg,CRC32_TYPE crc_type){ |
CRC结果异或返回
1 | uint32_t crc32_final_process(uint32_t crc_reg,CRC32_TYPE crc_type){ |
常用CRC计算模型
1 | CRC8_TYPE crc_8 = {0x07,0x00,0x00,0,0}; |
本文标题:C按位操作实现CRC计算算法
文章作者:Mr Bluyee
发布时间:2018-10-28
最后更新:2019-07-15
版权声明:The author owns the copyright, please indicate the source reproduced.