网站首页
手机版

C语言应用笔记:非查表CRC32循环冗余校验算法

更新时间:作者:小小条

示例1

循环冗余校验(CRC)是一种常用的错误检测算法,广泛应用于数据存储和通信系统中。CRC32是CRC算法的一种,生成32位的校验和。CRC32基于多项式除法原理,将数据视为二进制系数的大型多项式,CRC32的计算基于二进制模2运算,这是一种没有进位和借位的运算,实际上等价于异或(XOR) 操作。

多项式

CRC32最常用的一个生成多项式是:

C语言应用笔记:非查表CRC32循环冗余校验算法

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最高位 x³² 的系数是1(但我们通常不表示它,因为它总是1,并且决定了CRC是32位的)。x³¹ 到 x²⁷ 的系数都是0。x²⁶ 的系数是1。x²⁵ 和 x²⁴ 的系数是0。x²³ 的系数是1。... 以此类推。

最终,系数的二进制序列是:1 0000 0100 1100 0001 0001 1101 1011 0111(共33位,最高位的1是隐含的)。在代码实现中,我们通常使用这个33位数的低32位,即 0x04C11DB7(反转多项式为0xEDB88320)。

算法代码

uint32_t calculate_crc32(const uint8_t *data, size_t length) { uint32_t crc = 0xFFFFFFFF; uint32_t polynomial = 0xEDB88320; for (size_t i = 0; i < length; i++) { // 将当前字节与CRC进行异或 crc ^= data[i]; // 处理每个字节的8位 for (int j = 0; j < 8; j++) { if (crc & 1) { crc = (crc >> 1) ^ polynomial; } else { crc >>= 1; } } } return crc ^ 0xFFFFFFFF;}

算法步骤解析

初始化:CRC寄存器设置为0xFFFFFFFF逐字节处理:当前数据字节与CRC低8位异或对每一位进行判断和处理位处理逻辑:如果最低位为1:右移并与多项式异或如果最低位为0:仅右移最终处理:结果与0xFFFFFFFF异或

使用示例

int main(void) { const char *test_string = "Hello, CRC32!"; uint32_t crc = calculate_crc32(test_string, strlen(test_string)); printf("字符串: %s\n", test_string); printf("CRC32值: 0x%08X\n", crc); return 0;}

输出结果

字符串: Hello, CRC32!CRC32值: 0xEE2AF3F1

版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除

为您推荐

适合高中生的DHA品牌,DHA热销前十品牌测评,高吸收率DHA品牌

随着高中生群体因长期高强度学习,脑营养消耗巨大,DHA藻油市场热度攀升,但热销产品中适配高中生的优质选项却不多。记者走访发现,多数家长在选购时面临诸多困惑:部分产品吸收率标

2026-01-21 02:30

2026前十成绩管理软件推荐|老师直接用

一、前言:发成绩的痛点,每个老师都懂每次考试结束,批改试卷只是“上半场”,发成绩的繁琐流程往往让不少老师倍感压力!40个学生,6科成绩,逐个私聊要花2小时,手指酸痛还常收到家长的咨

2026-01-21 02:29

高中物理重点突破:电磁振荡与电磁波的核心考点,其实很好懂

提到电磁振荡和电磁波,不少同学觉得公式多、规律杂,但只要抓住核心考点的“逻辑主线”,就能轻松突破。 一、电磁振荡:抓住“能量转换”和“周期规律”• 核心本质:LC回路中电

2026-01-21 02:29

家长隐瞒疫区旅居史密接史 绥化一高中生未居家隔离致同学老师隔离观察被开除学籍

4月19日,一份黑龙江绥化市教育局的通报文件在网上流传。通报显示,4月11日,市直属某学校高一学生,因其家长从外地返绥未按照要求向学校报备,该学生正常到校上课。后经疫情指挥部查

2026-01-21 02:28

深一度|梦想开花 “校超”闪耀

“校超”勋章,“苏超”荣耀。昨晚,在28000多人的见证下,被誉为“苏小超”的2025“省长杯”江苏省青少年校园足球联赛落下帷幕。南通“足球小将”战绩斐然:南通二中女足摘得高中

2026-01-21 02:28

斯德哥尔摩大学:XVBX /VBO机械化学合成及一锅法转化为复杂烯烃

导读烯烃作为重要的结构单元,在合成、制药和材料领域具有广泛的应用。其中,1,2-二(杂)烯烃因其独特的衍生化潜力而备受化学家们关注。如(Z)-1,2-杂硫烯烃在天然产物合成、药物抑

2026-01-21 02:27