文章目录

  • 函数实现
  • 示例代码
  • 运行结果

函数实现

/******************************************************************************* CRC-32-IEEE 802.3* 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******************************************************************************/
uint32_t crc32_compute(const uint32_t initial_value,const uint8_t * data,const uint32_t data_length)
{uint32_t crc = initial_value;uint32_t idx;const uint32_t zero = 0U;const uint32_t modulo_256 = 0xffU;const uint32_t byte_shift = 8U;const uint32_t crc32_table[256] ={0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U, 0x706af48fU,0xe963a535U, 0x9e6495a3U, 0x0edb8832U, 0x79dcb8a4U, 0xe0d5e91eU, 0x97d2d988U,0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U, 0x90bf1d91U, 0x1db71064U, 0x6ab020f2U,0xf3b97148U, 0x84be41deU, 0x1adad47dU, 0x6ddde4ebU, 0xf4d4b551U, 0x83d385c7U,0x136c9856U, 0x646ba8c0U, 0xfd62f97aU, 0x8a65c9ecU, 0x14015c4fU, 0x63066cd9U,0xfa0f3d63U, 0x8d080df5U, 0x3b6e20c8U, 0x4c69105eU, 0xd56041e4U, 0xa2677172U,0x3c03e4d1U, 0x4b04d447U, 0xd20d85fdU, 0xa50ab56bU, 0x35b5a8faU, 0x42b2986cU,0xdbbbc9d6U, 0xacbcf940U, 0x32d86ce3U, 0x45df5c75U, 0xdcd60dcfU, 0xabd13d59U,0x26d930acU, 0x51de003aU, 0xc8d75180U, 0xbfd06116U, 0x21b4f4b5U, 0x56b3c423U,0xcfba9599U, 0xb8bda50fU, 0x2802b89eU, 0x5f058808U, 0xc60cd9b2U, 0xb10be924U,0x2f6f7c87U, 0x58684c11U, 0xc1611dabU, 0xb6662d3dU, 0x76dc4190U, 0x01db7106U,0x98d220bcU, 0xefd5102aU, 0x71b18589U, 0x06b6b51fU, 0x9fbfe4a5U, 0xe8b8d433U,0x7807c9a2U, 0x0f00f934U, 0x9609a88eU, 0xe10e9818U, 0x7f6a0dbbU, 0x086d3d2dU,0x91646c97U, 0xe6635c01U, 0x6b6b51f4U, 0x1c6c6162U, 0x856530d8U, 0xf262004eU,0x6c0695edU, 0x1b01a57bU, 0x8208f4c1U, 0xf50fc457U, 0x65b0d9c6U, 0x12b7e950U,0x8bbeb8eaU, 0xfcb9887cU, 0x62dd1ddfU, 0x15da2d49U, 0x8cd37cf3U, 0xfbd44c65U,0x4db26158U, 0x3ab551ceU, 0xa3bc0074U, 0xd4bb30e2U, 0x4adfa541U, 0x3dd895d7U,0xa4d1c46dU, 0xd3d6f4fbU, 0x4369e96aU, 0x346ed9fcU, 0xad678846U, 0xda60b8d0U,0x44042d73U, 0x33031de5U, 0xaa0a4c5fU, 0xdd0d7cc9U, 0x5005713cU, 0x270241aaU,0xbe0b1010U, 0xc90c2086U, 0x5768b525U, 0x206f85b3U, 0xb966d409U, 0xce61e49fU,0x5edef90eU, 0x29d9c998U, 0xb0d09822U, 0xc7d7a8b4U, 0x59b33d17U, 0x2eb40d81U,0xb7bd5c3bU, 0xc0ba6cadU, 0xedb88320U, 0x9abfb3b6U, 0x03b6e20cU, 0x74b1d29aU,0xead54739U, 0x9dd277afU, 0x04db2615U, 0x73dc1683U, 0xe3630b12U, 0x94643b84U,0x0d6d6a3eU, 0x7a6a5aa8U, 0xe40ecf0bU, 0x9309ff9dU, 0x0a00ae27U, 0x7d079eb1U,0xf00f9344U, 0x8708a3d2U, 0x1e01f268U, 0x6906c2feU, 0xf762575dU, 0x806567cbU,0x196c3671U, 0x6e6b06e7U, 0xfed41b76U, 0x89d32be0U, 0x10da7a5aU, 0x67dd4accU,0xf9b9df6fU, 0x8ebeeff9U, 0x17b7be43U, 0x60b08ed5U, 0xd6d6a3e8U, 0xa1d1937eU,0x38d8c2c4U, 0x4fdff252U, 0xd1bb67f1U, 0xa6bc5767U, 0x3fb506ddU, 0x48b2364bU,0xd80d2bdaU, 0xaf0a1b4cU, 0x36034af6U, 0x41047a60U, 0xdf60efc3U, 0xa867df55U,0x316e8eefU, 0x4669be79U, 0xcb61b38cU, 0xbc66831aU, 0x256fd2a0U, 0x5268e236U,0xcc0c7795U, 0xbb0b4703U, 0x220216b9U, 0x5505262fU, 0xc5ba3bbeU, 0xb2bd0b28U,0x2bb45a92U, 0x5cb36a04U, 0xc2d7ffa7U, 0xb5d0cf31U, 0x2cd99e8bU, 0x5bdeae1dU,0x9b64c2b0U, 0xec63f226U, 0x756aa39cU, 0x026d930aU, 0x9c0906a9U, 0xeb0e363fU,0x72076785U, 0x05005713U, 0x95bf4a82U, 0xe2b87a14U, 0x7bb12baeU, 0x0cb61b38U,0x92d28e9bU, 0xe5d5be0dU, 0x7cdcefb7U, 0x0bdbdf21U, 0x86d3d2d4U, 0xf1d4e242U,0x68ddb3f8U, 0x1fda836eU, 0x81be16cdU, 0xf6b9265bU, 0x6fb077e1U, 0x18b74777U,0x88085ae6U, 0xff0f6a70U, 0x66063bcaU, 0x11010b5cU, 0x8f659effU, 0xf862ae69U,0x616bffd3U, 0x166ccf45U, 0xa00ae278U, 0xd70dd2eeU, 0x4e048354U, 0x3903b3c2U,0xa7672661U, 0xd06016f7U, 0x4969474dU, 0x3e6e77dbU, 0xaed16a4aU, 0xd9d65adcU,0x40df0b66U, 0x37d83bf0U, 0xa9bcae53U, 0xdebb9ec5U, 0x47b2cf7fU, 0x30b5ffe9U,0xbdbdf21cU, 0xcabac28aU, 0x53b39330U, 0x24b4a3a6U, 0xbad03605U, 0xcdd70693U,0x54de5729U, 0x23d967bfU, 0xb3667a2eU, 0xc4614ab8U, 0x5d681b02U, 0x2a6f2b94U,0xb40bbe37U, 0xc30c8ea1U, 0x5a05df1bU, 0x2d02ef8dU};for (idx = zero; idx < data_length; idx++){crc = crc32_table[(crc ^ data[idx]) & modulo_256] ^ (crc >> byte_shift);}
//  return crc ^ 0xfffffff; 结果需要进行异或运算return crc;
}

示例代码

#include "stdio.h"
#include "stdlib.h"
#include "stdint.h"uint32_t crc32_compute(const uint32_t initial_value,const uint8_t * data,const uint32_t data_length);int main(void)
{const uint32_t initial_value = 0xffffffff;uint32_t crc_value;uint8_t data[14];for(uint8_t i = 0; i < sizeof(data)-4; i++){data[i] = i*2 + 10;printf("%02x ", data[i]);}crc_value = crc32_compute(initial_value, data, sizeof(data)-4);data[10] = (crc_value & 0xff000000)>>24;data[11] = (crc_value & 0x00ff0000)>>16;data[12] = (crc_value & 0x0000ff00)>>8;data[13] = (crc_value & 0x000000ff);printf("\n\n%08x\n\n", crc_value);for(uint8_t i = 0; i < sizeof(data); i++)printf("%02x ", data[i]);return 0;
}

运行结果

C语言查表法实现CRC-32计算IEEE 802.3标准相关推荐

  1. 嵌入式C语言查表法的项目应用

    嵌入式C实战项目开发技巧:如何对一个有规律的数组表进行位移操作 就像下面的这个表 之前写过上面这个标题的一篇文章,讲的是以位移的方式去遍历表中的数据,效率非常高,但是,如果要实现一个乱序的流水灯或者跑 ...

  2. c语言利用查表法画正弦波,嵌入式C语言查表法在项目中的应用

    就像下面的这个表 之前写过上面这个标题的一篇文章,讲的是以位移的方式去遍历表中的数据,效率非常高,但是,如果要实现一个乱序的流水灯或者跑马灯的话,思考一个这样的算法是不可取的,很费时间,也很费脑力,于 ...

  3. c语言查表程序,C语言查表法问题

    在设计内存管理器时,经常需要根据内存的size找到对应的数组index,查表是个不错的解决办法. 假设有一个数组,数组中每个元素代表一个范围,任意给定一个数,要尽可能快得找到其对应的数组索引,有什么好 ...

  4. Modbus-RTU查表法的CRC校验

    目录 一.适用场景 二.CRC表 三.CRC校验程序 一.适用场景 C程序Modbus-RTU的CRC校验. 二.CRC表 uint8_t const CRC_H[] = {0x00, 0xC1, 0 ...

  5. C语言查表法实现CRC-16计算

    文章目录 函数实现 示例代码 运行结果 函数实现 /*16 bit CRC with polynomial x^16+x^12+x^5+1 */ uint16_t crc16_compute(cons ...

  6. c语言查表法编程流水灯,通过查表法的流水灯汇编程序

    ORG   0              ;程序从0地址开始 START:    MOV   DPTR,#TAB      ;将DPTR指向编码表位置 LOOP:     CLR   A        ...

  7. 【转载】CRC32校验算法C语言版(查表法)

    先放原文链接:CRC32校验算法C语言版(查表法) 这几天搞串口通信,用到CRC32,把以前用到的东西整理一下,方便以后使用. STM32F103 芯片自带的CRC32硬件算法,匹配上位机CRC32算 ...

  8. crc16查表法c语言实现,CRC校验查表法原理及实现(CRC-16)

    绪论 在网上浏览了不少关于CRC校验的文章,基本上都是针对CRC校验原理的阐述以及关于CRC校验查表法的实际应用以及具体软件实现方法. 至于查的表是怎么来的,软件为何要这样实现不少文章并无说明.本篇文 ...

  9. 常用crc查表法_请教查表法计算CRC的原理

    自己写过的, 希望对你有帮助 Cyclic Redundancy Check(CRC) 原理及实现 /// 1: 需求 在数据传送过程中,为了能够进行错误检测, 往往在数据后追加一些检测码, 当接受方 ...

  10. 【基础知识】CRC(循环冗余校验)直接计算和查表法

    CRC概述 校验 校验是什么,个人理解就是经过一个算法,使用大量数据(几MB的数据)生成较小长度的一串信息(如16Bit),并切要做到 原数据不同时,生成的信息大概率不同(不是加密算法不考虑刻意造数据 ...

最新文章

  1. 使用Servlet完成单表的CRUD
  2. java 故障排查_java线上服务问题排查
  3. 用特征光谱分类神经网络
  4. 9.控制流语句_for循环
  5. vue修改计算属性的值_Vue语法高级之计算属性和侦听器
  6. perl数组硬引用_Perl 继续前行,Perl 7 将是下一代(硬核老王点评版)
  7. mathmagic pro mac使用教程|快速地创建任何方程
  8. C++基础::string
  9. 什么叫python设计模式_什么是Python设计模式
  10. 怎么用计算机创建wifi,电脑如何设置wifi
  11. error:R3InjectorError(AppModule)[HttpClient -> HttpClient -> HttpClient]:
  12. Docker学习之三:docker镜像管理
  13. Android 发布代码到github 并且部署到 JitPack maven 仓库详细步骤
  14. Mac下手动安装Tex/Latex Package
  15. LabVIEW如何实现高性能串口助手-附代码
  16. 创新易死需要勇气 需要抵御“抄袭”心魔
  17. 深圳电子行业的mes系统的需求分析方法~先达智控
  18. jQuery CSS3中国象棋网页代码
  19. hdu6304 Balala Power!
  20. ZEMAX牛顿望远物镜的优化设计

热门文章

  1. ps软件1.基础工具2.工具快捷键3.图片基本操作4.撤回方法5.抠图
  2. 加拿大卡尔加里市推出本地数字货币
  3. (SWAT-2)SWAT中土地利用数据库建立
  4. ico图标概述 附生成链接
  5. .Net框架搭建之1、SQL Server EF MVC简单三层框架
  6. 基于ROS的导航框架
  7. 【渝粤教育】广东开放大学 企业财务报表分析 形成性考核 (26)
  8. tplink710n无线打印服务器,tplink710n设置
  9. Dijkstra算法
  10. li标签中,img居中显示