【Golang】ModbusRTU协议CRC16校验算法

news2024/9/22 11:23:01

 CRC校验码是通过在数据后面附加一个短的校验序列来生成的,用于检测数据在传输过程中是否发生错误。CRC16是一种特定的CRC校验算法,它生成一个16位的校验码。

 下面是使用Go语言实现CRC16校验算法的代码:

package main
import (
	"encoding/hex"
	"fmt"
)
// crc16Modbus 函数计算给定指令字符串的CRC16校验码
func crc16Modbus(instruction string) (str string, err error) {
	// 将指令字符串转换为字节数组
	data, err := hex.DecodeString(instruction)
	if err != nil {
		return
	}
	// 初始化CRC值为0xFFFF
	crc := uint16(0xFFFF)
	// 遍历数据字节
	for _, b := range data {
		// 将当前字节与CRC值进行异或操作
		crc ^= uint16(b)
		// 对CRC值进行8次右移操作
		for i := 0; i < 8; i++ {
			// 如果最低位为1,则进行异或运算
			if crc&0x0001 != 0 {
				crc >>= 1
				crc ^= 0xA001
			} else {
				// 如果最低位为0,则直接右移
				crc >>= 1
			}
		}
	}
	// 将计算出的CRC16值转换为字节数组
	crcBytes := make([]byte, 2)
	crcBytes[0] = byte(crc & 0xFF)
	crcBytes[1] = byte((crc >> 8) & 0xFF)
	// 将CRC16校验码转换为十六进制字符串
	return hex.EncodeToString(crcBytes), nil
}
func main() {
	// 示例指令字符串
	instruction := "010300000001"
	// 生成CRC16校验码
	crc, _ := crc16Modbus(instruction)
	fmt.Println("CRC16 校验码:", crc)
}

 这个示例使用了CRC16 Modbus算法,它是一种广泛应用于工业领域的通信协议。

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1421494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【01】Linux 基本操作指令

带⭐的为重要指令 &#x1f308; 01、ls 展示当前目录下所有文件&#x1f308; 02、pwd 显示用户当前所在路径&#x1f308; 03、cd 进入指定目录&#x1f308; 04、touch 新建文件&#x1f308; 05、tree 以树形结构展示所有文件⭐ 06、mkdir 新建目录⭐ 07、rmdir 删除目录⭐…

某赛通电子文档安全管理系统 PolicyAjax SQL注入漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…

Linux--redhat9创建软件仓库

1.插入光盘&#xff0c;挂载镜像 模拟插入光盘: 点击:虚拟机-可移动设备-CD/DVD 设备状态全选&#xff0c;使用ISO影响文件选择当前版本镜像&#xff0c;点击确认。 2.输入: df -h 可以显示&#xff0c;默认/dev/sr0文件为光盘文件&#xff0c;挂载点为/run/media/root/镜像…

【操作系统·考研】文件系统基础

1.概述 文件(File)是以硬盘为载体的存储在计算机上的信息集合&#xff0c;文件可以是文本文档、图片、程序等&#xff0c;基本访问单元可以是字节或记录&#xff0c;可以长期储存在硬盘中&#xff0c;并允许可控制的进程间共享访问&#xff0c;还可以被组成成更复杂的结构。 在…

关于 IntelliJ IDEA 中 Schedule for Addition 的问题

IntelliJ IDEA是一款强大的Java集成开发环境&#xff0c;由JetBrAIns公司开发。它以其智能代码编辑、代码分析工具、自动代码补全、强大的调试功能和内建的版本控制等特性而闻名。此外&#xff0c;它还支持Kotlin、Groovy、Scala和Android开发等多种语言和框架。 IntelliJ IDE…

【XR806开发板试用】在 xr806 上用 ncnn 跑神经网络 mnist

在 xr806 上用 ncnn 跑神经网络 mnist 0x0 介绍 xr806 和 ncnn https://xr806.docs.aw-ol.com/ XR806是全志科技旗下子公司广州芯之联研发设计的一款支持WiFi和BLE的高集成度无线MCU芯片&#xff0c;支持鸿蒙L0系统 https://github.com/Tencent/ncnn ncnn是腾讯开源的高性…

纯静态微信小程序水果商城

首页代码 <view class"container"><!-- 轮播图 --><view class"swiper-container"><swiper class"screen-swiper" indicator-dots"true" circular"true" autoplay"true" interval"300…

【开源】基于JAVA+Vue+SpringBoot的数据可视化的智慧河南大屏

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 A4.2 数据模块 B4.3 数据模块 C4.4 数据模块 D4.5 数据模块 E 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数据可视化的智慧河南大屏&#xff0c;包含了GDP、…

Unity:构建游戏和交互应用的强大引擎

Unity&#xff1a;构建游戏和交互应用的强大引擎 在游戏开发和交互应用领域&#xff0c;Unity 已经成为最受欢迎和广泛使用的开发引擎之一。无论是独立开发者、游戏工作室还是企业开发团队&#xff0c;Unity 都提供了强大的工具和功能&#xff0c;帮助开发者构建出令人惊叹的视…

【Prometheus】Prometheus的容器化部署

目录 实验部署 1、创建账户绑定集群 2、node-exporter发现节点 3、创建configmap&#xff0c;传输配置文件&#xff1a; 3.1、热更新修改configmap方式&#xff1a; 4、部署Prometheus&#xff1a; 5、部署service提供外部访问&#xff1a; 6、安装grafana可视化工具&am…

win wsl2 Ubuntu-22.04 设置时间为国内时间

使用 wsl2 安装 Ubuntu-22.04 后 时间不正确&#xff0c;主要有两个原因 时区设置不正确&#xff0c;国内为京八区。 时区正确后&#xff0c;没有同步时间。&#xff08;大部分人容易忽略这一点&#xff09; Linux 默认情况下使用 UTC 格式作为标准时间格式&#xff0c;如果在…

【论文解读】Collaboration Helps Camera Overtake LiDAR in 3D Detection

CoCa3D 摘要引言Collaborative Camera-Only 3D DetectionCollaborative depth estimationCollaborative detection feature learning 实验结论和局限 摘要 与基于 LiDAR 的检测系统相比&#xff0c;仅相机 3D 检测提供了一种经济的解决方案&#xff0c;具有简单的配置来定位 3…

qt语言国际化(翻译),并实现多窗口同时翻译

一、.pro文件中添加支持的语言 在.pro文件中添加下面几句&#xff0c;支持中文和英文 TRANSLATIONS lanague_cn.ts\lanague_en.ts二、通过qt语言家更新翻译生成.ts文件 完成以后在工程目录可以看到.ts文件 三、通过linguist翻译文件 打开文件 将两个文件同时选中&#xf…

(一)PySpark3:安装教程及RDD编程(非常详细)

目录 一、pyspark介绍 二、PySpark安装 三、RDD编程 1、创建RDD 2、常用Action操作 ①collect ②take ③takeSample ④first ⑤count ⑥reduce ⑦foreach ⑧countByKey ⑨saveAsTextFile 3、常用Transformation操作 ①map ②filter ③flatMap ④sample ⑤d…

Matlab plot绘图的 title 语法

x 0:1:10; >> y x.^2 -10*x15; >> plot(x,y) >> title(x_y, interpreter, none) title 里面的 x_y , y不会被当作下标。

数据结构--堆排序(超详细!)

一、前言 堆排序与Top K问题是堆的两大应用&#xff0c;在我们日常也有很广泛的用处 我们已经上面已经说过了堆&#xff0c;这次来说堆的其中一个应用---堆排序。 二、堆排序 堆排序优势在哪里&#xff1f;有什么恐怖之处吗&#xff1f; 重点&#xff1a;拿一个举例&…

你ping一下,服务器累成狗--第二篇

你ping一下&#xff0c;服务器累成狗-目录篇文章浏览阅读1.7k次&#xff0c;点赞65次&#xff0c;收藏20次。我们的电脑怎么干活的https://blog.csdn.net/u010187815/article/details/135796967 你ping一下&#xff0c;服务器累成狗--第一篇文章浏览阅读62次&#xff0c;点赞6…

记录 | ubuntu nm命令的基本使用

什么是nm命令 nm命令是linux下针对某些特定文件的分析工具&#xff0c;能够列出库文件&#xff08;.a、.lib&#xff09;、目标文件&#xff08;*.o&#xff09;、可执行文件的符号表。 nm命令的常用参数 -A 或 -o 或 --print-file-name&#xff1a;打印出每个符号属于的文件…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之DataPanel组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之DataPanel组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、DataPanel组件 数据面板组件&#xff0c;用于将多个数据占比情况使用占比图进…

1. 两数之和(力扣LeetCode)

文章目录 1. 两数之和题目描述哈希表&#xff1a;map二分查找暴力&#xff1a;双重for循环 1. 两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可…