# crc **Repository Path**: Createtree/crc ## Basic Information - **Project Name**: crc - **Description**: 基于C语言的CRC库 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-15 - **Last Updated**: 2024-03-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## CRC > 基于C语言的CRC算法库 ### Feature - 仅一个函数接口 - 实现并测试了常用CRC参数模型,详见下表: | CRC算法名称 | 多项式公式 | 宽度 | 多项式 | 初始值 | 结果异或值 | 输入反转 | 输出反转 | | ------------------ | ------------------------------------------------------------------------------------------------------- | ---- | -------- | -------- | ---------- | -------- | -------- | | CRC-4/ITU | x^4 + x + 1 | 4 | 03 | 00 | 00 | true | true | | CRC-5/EPC | x^5 + x^3 + 1 | 5 | 09 | 09 | 00 | false | false | | CRC-5/ITU | x^5 + x^4 + x^2 + 1 | 5 | 15 | 00 | 00 | true | true | | CRC-5/USB | x^5 + x^2 + 1 | 5 | 05 | 1F | 1F | true | true | | CRC-6/ITU | x^6 + x + 1 | 6 | 03 | 00 | 00 | true | true | | CRC-7/MMC | x^7 + x^3 + 1 | 7 | 09 | 00 | 00 | false | false | | CRC-8 | x^8 + x^2 + x + 1 | 8 | 07 | 00 | 00 | false | false | | CRC-8/ITU | x^8 + x^2 + x + 1 | 8 | 07 | 00 | 55 | false | false | | CRC-8/ROHC | x^8 + x^2 + x + 1 | 8 | 07 | FF | 00 | true | true | | CRC-8/MAXIM | x^8 + x^5 + x^4 + 1 | 8 | 31 | 00 | 00 | true | true | | CRC-16/IBM | x^16 + x^15 + x^2 + 1 | 16 | 8005 | 0000 | 0000 | true | true | | CRC-16/MAXIM | x^16 + x^15 + x^2 + 1 | 16 | 8005 | 0000 | FFFF | true | true | | CRC-16/USB | x^16 + x^15 + x^2 + 1 | 16 | 8005 | FFFF | FFFF | true | true | | CRC-16/MODBUS | x^16 + x^15 + x^2 + 1 | 16 | 8005 | FFFF | 0000 | true | true | | CRC-16/CCITT | x^16 + x^12 + x^5 + 1 | 16 | 1021 | 0000 | 0000 | true | true | | CRC-16/CCITT-FALSE | x^16 + x^12 + x^5 + 1 | 16 | 1021 | FFFF | 0000 | false | false | | CRC-16/X25 | x^16 + x^12 + x^5 + 1 | 16 | 1021 | FFFF | FFFF | true | true | | CRC-16/XMODEM | x^16 + x^12 + x^5 + 1 | 16 | 1021 | 0000 | 0000 | false | false | | CRC-16/DNP | x^16 + x^13 + x^12 + x^11 + x^10 + x^8 + x^6 + x^5 + x^2 + 1 | 16 | 3D65 | 0000 | FFFF | true | true | | CRC-32 | x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1 | 32 | 04C11DB7 | FFFFFFFF | FFFFFFFF | true | true | | CRC-32/MPEG-2 | x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1 | 32 | 04C11DB7 | FFFFFFFF | 00000000 | false | false | ### Usage 使用本库提供的模板 ```C #include "crc.h" #include int main(void) { uint8_t test[] = {0,1,2,3,4,5,6,7,8,9,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F}; uint32_t crc_result = CRC_CALC(&CRC_CFG_32_MPEG2, test, sizeof(test)); printf("result:%08X\n\r", crc_result); } ``` 使用自定义模板 ```C #include "crc.h" #include // [1] create your crc config // const crc_config_t mycrc = { .initialValue = InitialValue, .polynomial = Polynomial, .xorOutput = XorOutput, .width = Width, .invertInput = InvertInput, .invertOutput = InvertOutput }; int main(void) { uint8_t test[] = {0,1,2,3,4,5,6,7,8,9,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F}; // [2] calculate crc use your config // uint32_t crc_result = crc_calculate(&mycrc, mycrc.initialValue, sizeof(test)); printf("result:%08X\n\r", crc_result); } ``` ### Update Logs 2024.3.15 v0.1 > - 创建文件 > - 实现了crc_calculate接口