分享一段crc16校验算法

2023-10-31 19:30

本文主要是介绍分享一段crc16校验算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分享一段CRC16的算法
#include <stdio.h>
//CRC初始值 0x1D0F, Poly: 0x1021.

CRC校验算法核心代码:

  • 输入待校验的字符串,返回CRC16的数值,
  • 输入待校验的字符串+CRC16数值,如果返回值为0,则表示校验码是正确的。
#define POLY 0x1021 //crc-ccitt mask
unsigned short SW_CheckCrc16(unsigned short crc, unsigned char *pDataAddr, unsigned short bDataLen) 
{unsigned char WorkData;unsigned char bitMask;unsigned char NewBit;while(bDataLen--){WorkData = *pDataAddr++;for (bitMask = 0x80; bitMask != 0; bitMask >>= 1) {//Align test bit with next bit of the message unsigned char, starting with msb.NewBit = ((WorkData & bitMask) != 0) ^ ((crc & 0x8000) != 0);crc <<= 1;if (NewBit) {crc ^= POLY;}} //for (bitMask = 0x80; bitMask != 0; bitMask >>= 1)}return crc;
}

一个数据包通常由前导码,包头,载荷,校验四部分组成。包头,载荷是需要校验的数据。

PreambleFrame headerpayloadintegrity checks

数据包校验程序:以包头的校验结果来校验载荷。

unsigned short SW_CreateCrc16( unsigned char *pHeaderAddr, unsigned char bHeaderLen, unsigned char *pPayloadAddr, unsigned char bPayloadLen)
{unsigned short crc;crc = 0x1D0F;crc = SW_CheckCrc16(crc, pHeaderAddr, bHeaderLen);//printf("HeaderAddr %d \n",crc);//crc = 0x1D0F;crc = SW_CheckCrc16(crc, pPayloadAddr, bPayloadLen);//printf("PayloadAddr %x \n",crc);return crc;
}

写一个主程序来测试上面的CRC16算法:

int main()
{unsigned char headArray[12] = {0,0,0,0,0,0,0,0,0,0,0x84,0xF9};unsigned char payloadArray[10] = {0};SW_CreateCrc16(headArray,12,payloadArray,10);return 0;
}

将程序放在"菜鸟教程"C语言在线编辑器中运行,得到的结果如下。菜鸟教程真的是一个很好的网站。非常值得关注和阅读。
在这里插入图片描述
CSDN博客仅作为本人工作学习之余的笔记使用,无任何商业目的,如果侵犯了你的隐私或权益,请随时联系作者,本人将及时删除相关内容

这篇关于分享一段crc16校验算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/317596

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Java中的Schema校验技术与实践示例详解

《Java中的Schema校验技术与实践示例详解》本主题详细介绍了在Java环境下进行XMLSchema和JSONSchema校验的方法,包括使用JAXP、JAXB以及专门的JSON校验库等技术,本文... 目录1. XML和jsON的Schema校验概念1.1 XML和JSON校验的必要性1.2 Sche

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

Linux从文件中提取特定内容的实用技巧分享

《Linux从文件中提取特定内容的实用技巧分享》在日常数据处理和配置文件管理中,我们经常需要从大型文件中提取特定内容,本文介绍的提取特定行技术正是这些高级操作的基础,以提取含有1的简单需求为例,我们可... 目录引言1、方法一:使用 grep 命令1.1 grep 命令基础1.2 命令详解1.3 高级用法2

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr