当前位置: 首页 > news >正文

C语言CRC16_CCITT_FALSE函数法和查表法实现

函数法:


// CRC16_CCITT_FALSE 参数
#define CRC16_CCITT_FALSE_POLY 0x1021
#define CRC16_CCITT_FALSE_INIT 0xFFFFuint16_t CRC16_CCITT_FALSE(const uint8_t *data, uint16_t length) {uint16_t crc = CRC16_CCITT_FALSE_INIT;for (uint16_t i = 0; i < length; i++) {crc ^= (uint16_t)data[i] << 8;for (uint8_t bit = 0; bit < 8; bit++) {if (crc & 0x8000) {crc = (crc << 1) ^ CRC16_CCITT_FALSE_POLY;} else {crc <<= 1;}}}return crc;
}

查表法(结构体INT_08BIT_2    小端CPU  ‘L’在前‘H’在后,大端CPU  ‘H’在前‘L’在后)

typedef struct                
{                             uchar	 L;           uchar	 H;          
} INT_08BIT_2;  typedef union                  
{	                            u16   Int16Bit;       INT_08BIT_2  Int08Bit;       
} INT_16BIT_08BIT;  
u16 const CRC_Tab[] =  {0x00000,0x01021,0x02042,0x03063,0x04084,0x050a5,0x060c6,0x070e7,0x08108,0x09129,0x0a14a,0x0b16b,0x0c18c,0x0d1ad,0x0e1ce,0x0f1ef,0x01231,0x00210,0x03273,0x02252,0x052b5,0x04294,0x072f7,0x062d6,0x09339,0x08318,0x0b37b,0x0a35a,0x0d3bd,0x0c39c,0x0f3ff,0x0e3de,0x02462,0x03443,0x00420,0x01401,0x064e6,0x074c7,0x044a4,0x05485,0x0a56a,0x0b54b,0x08528,0x09509,0x0e5ee,0x0f5cf,0x0c5ac,0x0d58d,0x03653,0x02672,0x01611,0x00630,0x076d7,0x066f6,0x05695,0x046b4,0x0b75b,0x0a77a,0x09719,0x08738,0x0f7df,0x0e7fe,0x0d79d,0x0c7bc,0x048c4,0x058e5,0x06886,0x078a7,0x00840,0x01861,0x02802,0x03823,0x0c9cc,0x0d9ed,0x0e98e,0x0f9af,0x08948,0x09969,0x0a90a,0x0b92b,0x05af5,0x04ad4,0x07ab7,0x06a96,0x01a71,0x00a50,0x03a33,0x02a12,0x0dbfd,0x0cbdc,0x0fbbf,0x0eb9e,0x09b79,0x08b58,0x0bb3b,0x0ab1a,0x06ca6,0x07c87,0x04ce4,0x05cc5,0x02c22,0x03c03,0x00c60,0x01c41,0x0edae,0x0fd8f,0x0cdec,0x0ddcd,0x0ad2a,0x0bd0b,0x08d68,0x09d49,0x07e97,0x06eb6,0x05ed5,0x04ef4,0x03e13,0x02e32,0x01e51,0x00e70,0x0ff9f,0x0efbe,0x0dfdd,0x0cffc,0x0bf1b,0x0af3a,0x09f59,0x08f78,0x09188,0x081a9,0x0b1ca,0x0a1eb,0x0d10c,0x0c12d,0x0f14e,0x0e16f,0x01080,0x000a1,0x030c2,0x020e3,0x05004,0x04025,0x07046,0x06067,0x083b9,0x09398,0x0a3fb,0x0b3da,0x0c33d,0x0d31c,0x0e37f,0x0f35e,0x002b1,0x01290,0x022f3,0x032d2,0x04235,0x05214,0x06277,0x07256,0x0b5ea,0x0a5cb,0x095a8,0x08589,0x0f56e,0x0e54f,0x0d52c,0x0c50d,0x034e2,0x024c3,0x014a0,0x00481,0x07466,0x06447,0x05424,0x04405,0x0a7db,0x0b7fa,0x08799,0x097b8,0x0e75f,0x0f77e,0x0c71d,0x0d73c,0x026d3,0x036f2,0x00691,0x016b0,0x06657,0x07676,0x04615,0x05634,0x0d94c,0x0c96d,0x0f90e,0x0e92f,0x099c8,0x089e9,0x0b98a,0x0a9ab,0x05844,0x04865,0x07806,0x06827,0x018c0,0x008e1,0x03882,0x028a3,0x0cb7d,0x0db5c,0x0eb3f,0x0fb1e,0x08bf9,0x09bd8,0x0abbb,0x0bb9a,0x04a75,0x05a54,0x06a37,0x07a16,0x00af1,0x01ad0,0x02ab3,0x03a92,0x0fd2e,0x0ed0f,0x0dd6c,0x0cd4d,0x0bdaa,0x0ad8b,0x09de8,0x08dc9,0x07c26,0x06c07,0x05c64,0x04c45,0x03ca2,0x02c83,0x01ce0,0x00cc1,0x0ef1f,0x0ff3e,0x0cf5d,0x0df7c,0x0af9b,0x0bfba,0x08fd9,0x09ff8,0x06e17,0x07e36,0x04e55,0x05e74,0x02e93,0x03eb2,0x00ed1,0x01ef0
};/*
mode==0  Normal mode
mode==1  Add the CRC result to the end of the array
*/
u16 AH_CRC_Verify( uchar *str, uint size, uchar mode )
{          uint32       i; INT_16BIT_08BIT	 crc;INT_16BIT_08BIT	 y;crc.Int16Bit = 0xffff;for( i = 0 ; i < size ; i++ ){y.Int16Bit    = CRC_Tab[ str[ i ] ^ crc.Int08Bit.H ];y.Int08Bit.H ^= crc.Int08Bit.L;crc.Int16Bit  = y.Int16Bit;}if( mode == 1 ){str[ i++ ] = y.Int08Bit.H ;str[ i ]   = y.Int08Bit.L ;}return( crc.Int16Bit );
} 

串口通信数据包介绍和包结构定义实例-CSDN博客

电脑串口和手机蓝牙BLE串口数据包通信调试工具-CSDN博客

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【梯度下降算法学习笔记】
  • 基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统
  • 评价类——熵权法(Entropy Weight Method, EWM),完全客观评价
  • 老年人养生之道:岁月静好,健康常伴
  • 代码随想录 八股文训练营40天总结
  • Cypress初次安装启动常见问题
  • PyQt5 导入ui文件报错 AttributeError: type object ‘Qt‘ has no attribute
  • SpringCloud从零开始简单搭建 - JDK17
  • 【HTTP】请求“报头”,Referer 和 Cookie
  • Windows控制台中文乱码怎么解决?(nes,一些exe窗口程序)
  • k8s证书过期处理
  • 【2025】中医药健康管理小程序(安卓原生开发+用户+管理员)
  • C#基础知识-.NET,变量,容量单位,数据类型
  • MATLAB系列05:自定义函数
  • android设置实现广告倒计时功能
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • AHK 中 = 和 == 等比较运算符的用法
  • gulp 教程
  • HTTP中GET与POST的区别 99%的错误认识
  • Laravel 中的一个后期静态绑定
  • scrapy学习之路4(itemloder的使用)
  • vue2.0项目引入element-ui
  • 理清楚Vue的结构
  • 聊聊flink的TableFactory
  • AI算硅基生命吗,为什么?
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​MySQL主从复制一致性检测
  • ###C语言程序设计-----C语言学习(6)#
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (C语言)fgets与fputs函数详解
  • (NSDate) 时间 (time )比较
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (一)插入排序
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .cn根服务器被攻击之后
  • .Net 4.0并行库实用性演练
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET 服务 ServiceController
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET与 java通用的3DES加密解密方法
  • :如何用SQL脚本保存存储过程返回的结果集
  • @EnableConfigurationProperties注解使用
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [AX]AX2012 R2 出差申请和支出报告
  • [BZOJ 3282] Tree 【LCT】
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [C++基础]-入门知识