[数据结构和算法]CRC8/CRC16/CRC32常见几个标准的算法及C语言实现 您所在的位置:网站首页 常见各类口罩采用标准及相关要求有哪些 [数据结构和算法]CRC8/CRC16/CRC32常见几个标准的算法及C语言实现

[数据结构和算法]CRC8/CRC16/CRC32常见几个标准的算法及C语言实现

2024-06-26 08:25| 来源: 网络整理| 查看: 265

今天继续来异或的另外一种用法,CRC数据校验。

[数据结构和算法]最简单的加密算法;

参考的CRC16常见几个标准的算法, 但是感觉程序写的太啰嗦了点,我们用表驱动来重构一下程序,虽然CRC8/CRC16/CRC32的实现基本一样,但是C语言不能像C++一样使用模板,不然程序就更加简洁了

常见CRC参数模型如下: CRC算法名称多项式公式宽度多项式初始值结果异或值输入值反转输出值反转CRC-4/ITUx4 + x + 14030000truetrueCRC-5/EPCx4 + x3 + 15090900falsefalseCRC-5/ITUx5 + x4 + x2 + 15150000truetrueCRC-5/USBx5 + x2 + 15051F1FtruetrueCRC-6/ITUx6 + x + 16030000truetrueCRC-7/MMCx7 + x3 + 17090000falsefalseCRC-8x8 + x2 + x + 18070000falsefalseCRC-8/ITUx8 + x2 + x + 18070055falsefalseCRC-8/ROHCx8 + x2 + x + 1807FF00truetrueCRC-8/MAXIMx8 + x5 + x4 + 18310000truetrueCRC-16/IBMx6 + x5 + x2 + 116800500000000truetrueCRC-16/MAXIMx6 + x5 + x2 + 11680050000FFFFtruetrueCRC-16/USBx6 + x5 + x2 + 1168005FFFFFFFFtruetrueCRC-16/MODBUSx6 + x5 + x2 + 1168005FFFF0000truetrueCRC-16/CCITTx6 + x2 + x5 + 116102100000000truetrueCRC-16/CCITT-FALSEx6 + x2 + x5 + 1161021FFFF0000falsefalseCRC-16/x5x6 + x2 + x5 + 1161021FFFFFFFFtruetrueCRC-16/XMODEMx6 + x2 + x5 + 116102100000000falsefalseCRC-16/DNPx6 + x3 + x2 + x1 + x0 + x8 + x6 + x5 + x2 + 1163D650000FFFFtruetrueCRC-32x2 + x6 + x3 + x2 + x6 + x2 + x1 + x0 + x8 + x7 + x5 + x4 + x2 + x + 13204C11DB7FFFFFFFFFFFFFFFFtruetrueCRC-32/MPEG-2x32 + x6 + x3 + x2 + x6 + x2 + x1 + x0 + x8 + x7 + x5 + x4 + x2 + x + 13204C11DB7FFFFFFFF00000000falsefalse

测试平台:stm32l031K6T6 验证平台:CRC(循环冗余校验)在线计算,这是CRC在线计算工具

点击下载代码 部分程序如下: typedef struct{ uint8_t initVal; uint8_t POLY; uint8_t sub; uint8_t bits; char *funcName; }crc8_Table_TypeDef; static const crc8_Table_TypeDef CRC8_Table[] = { {0x00, 0x07, 0x00, MSB_MODE, "CRC8"}, {0x00, 0x07, 0x55, MSB_MODE, "CRC8_ITU"}, {0xFF, 0x07, 0x00, LSB_MODE, "CRC8_ROHC"}, {0x00, 0x31, 0x00, LSB_MODE, "CRC8_MAXIM"}, }; uint8_t calc_crc8(uint8_t Mode, uint8_t*pMsg, uint16_t Len){ if(Mode > sizeof(CRC8_Table)/sizeof(crc8_Table_TypeDef)) return 0; uint8_t CRCin = CRC8_Table[Mode].initVal; uint8_t tmp = 0; printf("CRC_Mode: %s\n", CRC8_Table[Mode].funcName); for(uint16_t i=0;i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有