【物联网开发】、【小程序蓝牙通讯数据校验】JS CRC-16-MODBUS 验证 高位在前地位在后;JS异或校验;16进制字符串和float互转

1.CRC校验

/*计算CRC-16/MODBUS校验位高低位*/
function calculateCRC16Modbus(dataHexString) {const dataBytes = [];for (let i = 0; i < dataHexString.length; i += 2) {dataBytes.push(parseInt(dataHexString.substr(i, 2), 16));}let crc = 0xFFFF;const polynomial = 0xA001; // This is the polynomial x^16 + x^15 + x^2 + 1for (const byte of dataBytes) {crc ^= byte;for (let i = 0; i < 8; i++) {if (crc & 0x0001) {crc = ((crc >> 1) ^ polynomial) & 0xFFFF;} else {crc >>= 1;}}}crc = pad(crc.toString(16).toUpperCase(),4);//补0(不然会出八阿哥)let crcArr = new Array(2)console.log('crc='+crc)crcArr[0] = crc.substring(2, 4)crcArr[1] = crc.substring(0, 2)let code = crcArr[0] + crcArr[1]return code
}

2.异或校验

// 生成校验码
function genCheckCode(msgBodyCode) {let firstByte = null;for (let i = 0; i < msgBodyCode.length; i = i + 2) {const curCode = '0x' + msgBodyCode.substring(i, i + 2);if (i == 0) {firstByte = curCode} else {firstByte = firstByte ^ curCode}}firstByte = parseInt(firstByte)const codePad = pad(firstByte.toString(16), 2)console.log('校验码==' + codePad)return codePad;
}

3.pad 左侧补0方法

// 左侧补齐0
function pad(str, max) {str = str.toString();return str.length < max ? pad("0" + str, max) : str;
}

4.16进制和float(4字节)互转

/*4字节byte十六进制转浮点数      解析   */
function hex2float(hexString, precision) {//hex2float('EC519A44', 2))precision = parseInt(precision)if (isNaN(precision) || precision < 0) {precision = 2}// 高低位转换const byteArray = [];for (let i = 0; i < hexString.length; i += 2) {byteArray.unshift(hexString.substr(i, 2));}// 创建一个包含十六进制数的 ArrayBufferconst hexValue = '0x' + byteArray.join('');const buffer = new ArrayBuffer(4);const dataView = new DataView(buffer);dataView.setUint32(0, hexValue, false);// 从 DataView 中读取浮点数const floatValue = dataView.getFloat32(0, false);return floatValue.toFixed(precision);
}/*浮点数转4字节十六进制      发送*/
function float2hex(floatNumber) {// 创建一个 4 字节的 ArrayBufferconst buffer = new ArrayBuffer(4);// 使用 DataView 来操作 ArrayBufferconst dataView = new DataView(buffer);// 将浮点数写入到 DataView 中dataView.setFloat32(0, floatNumber, false); // 第二个参数是偏移量,false 表示使用大端字节序// 从 DataView 中读取十六进制表示const hexString = dataView.getUint32(0, false).toString(16).toUpperCase();// 高低位转换const byteArray = [];for (let i = 0; i < hexString.length; i += 2) {byteArray.unshift(hexString.substr(i, 2));}return byteArray.join('');
}

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

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

相关文章

【数据结构初阶(5)】链式队列的基本操作实现

文章目录 队列的定义初始化队列队尾入队列队头出队列取队头元素取队尾元素获取队列有效元素个数判断队空销毁队列 因为队列比较简单&#xff0c;关于队列的概念就不过多赘述了&#xff0c;本文只讲链队的基本操作实现 队列的定义 定义队列结点结构 链队中的每个结点都应该包…

windows安装mysql5.7.26

解压mysql5.7.26文件夹拷贝到c:下 添加系统环境变量C:\mysql-5.7.26\bin cmd管理员打开终端,进入C:\mysql-5.7.26\bin 运行mysqld --initialize&#xff0c;生成data目录的文件。 在安装目录下创建my.ini文件&#xff0c;点击编辑&#xff0c;配置以下信息&#xff1a; 设置my…

Go 数字类型

一、数字类型 1、Golang 数据类型介绍 Go 语言中数据类型分为&#xff1a;基本数据类型和复合数据类型基本数据类型有&#xff1a; 整型、浮点型、布尔型、字符串复合数据类型有&#xff1a; 数组、切片、结构体、函数、map、通道&#xff08;channel&#xff09;、接口 2、…

什么是 dropblock

大家好啊&#xff0c;我是董董灿。 之前介绍过 dropout 算法&#xff0c;它在训练神经网络中&#xff0c;可以随机丢弃神经元&#xff0c;是一种防止网络过拟合的方法。 但是在卷积神经网络中&#xff0c;dropout 的表现却不是很好&#xff0c;于是研究人员又搞了一个“结构化…

Python列表:操作与实例分析,你值得一看!

Python列表是一种重要的数据结构&#xff0c;它允许您存储和管理多个数据项。本文将深入探讨Python列表的操作&#xff0c;以及通过具体实例分析如何使用它们&#xff0c;以帮助您更好地理解和优化您的代码。 什么是Python列表&#xff1f; Python列表是一种有序、可变的数据结…

基于51单片机的全自动洗衣机proteus仿真设计

标题目录 &#x1f4ab;51单片机全自动洗衣机proteus仿真设计&#x1f4ab;设计介绍&#x1f4ab;仿真图电动机驱动模块电路设计电源模块电路设计控制按键进水阀和排水阀控制继电器 &#x1f4ab;程序设计main函数 &#x1f4ab;设计报告&#x1f4ab;资料清单&&下载链…

递归实现选择排序.

思路: 1.定位数组中的最大元素或最小元素 2.将其与第一个元素交换位置 3.接着将剩余未排序的元素中的最大值或最小值与第二个元素交换位置 4.以此类推,直到排序完成 示例: [ 8, 5, 1, 9, 3 ] //原始数组 [ 1, 5, 8, 9, 3 ] //3与8交换 [ 1, 3, 8, 9, 5 ] //3与5交换 [ 1,…

PC行内编辑

点击编辑&#xff0c;行内编辑输入框出现&#xff0c;给列表的每条数据定义编辑标记&#xff0c;最后一定记得 v-model双向绑定&#xff0c;使数据回显。 步骤&#xff1a; 1、给行数据定义编辑标记 2、点击行编辑标记&#xff08;isedit&#xff09; 3、插槽根据标记渲染表单 …

探究Kafka原理-6.CAP理论实践

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44…

Transformer中的多头注意力机制-为什么需要多头?

Transformer为什么使用多头注意力机制呢&#xff1f; 多头可以学习到不同维度的特征和信息。为什么可以学习到不同维度的信息呢&#xff1f; 答案是&#xff1a;多头注意力机制的组成是有单个的self attention&#xff0c;由于self attention通过产生QKV矩阵来学习数据特征&a…

leetCode 1026. 节点与其祖先之间的最大差值 + 递归

1026. 节点与其祖先之间的最大差值 - 力扣&#xff08;LeetCode&#xff09; 给定二叉树的根节点 root&#xff0c;找出存在于 不同 节点 A 和 B 之间的最大值 V&#xff0c;其中 V |A.val - B.val|&#xff0c;且 A 是 B 的祖先。&#xff08;如果 A 的任何子节点之一为 B&am…

网络和Linux网络_5(应用层)HTTP协议(方法+报头+状态码)

目录 1. HTTP协议介绍 1.1 URL介绍 1.2 urlencode和urldecode 1.3 HTTP协议格式 1.4 HTTP的方法和报头和状态码 2. 代码验证HTTP协议格式 HttpServer.hpp 2.2 html正式测试 Util.hpp index.html 2.3 再看HTTP方法和报头和状态码 2.3.1 方法_GET和POST等 2.3.2 报头…

SpringBoot——国际化

优质博文&#xff1a;IT-BLOG-CN 一、Spring 编写国际化时的步骤 【1】编写国际化配置文件&#xff1b; 【2】使用ResourceBundleMessageSource管理国际化资源文件&#xff1b; 【3】在页面使用ftp:message取出国际化内容&#xff1b; 二、SpringBoot编写国际化步骤 【1】创…

cJSON的使用——下载、打包与解析

目录 一、cJSON的下载 二、cJSON的常用函数 三、cJSON的打包例程 四、cJSON的解析例程1 五、cJSON的解析例程2 一、cJSON的下载 cjson下载 二、cJSON的常用函数 cJSON *cJSON_Parse(const char *value); 作用&#xff1a;将一个JSON数据包&#xff0c;按照cJSON结构体…

Day48:583. 两个字符串的删除操作、72. 编辑距离

文章目录 583. 两个字符串的删除操作思路代码实现 72. 编辑距离思路代码实现 583. 两个字符串的删除操作 题目链接 思路 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;以i-1为结尾的字符串word1&#xff0c;和以j-1位结尾的字符串word2&am…

假设检验(一)假设检验的基本概念

文章目录 假设与检验规则两类错误假设检验的一般步骤参考文献 假设检验&#xff08;Test of Hypothesis&#xff09;是指&#xff0c;先对总体或总体的性质提出某项假设&#xff0c;再利用样本所提供的信息对提出的假设进行检验&#xff0c;以判断该假设是否成立。假设检验可分…

编译器设计02-前端概述

前端处理概述 前端处理&#xff1a;词法分析、语法分析、语义分析 前端处理犹如阅读英文文章&#xff0c;往往我们需要先理清文章中各个词的意思&#xff0c;这类似词法分析&#xff0c;得到“单词序列”&#xff1b;再梳理整篇文章的脉络&#xff0c;这类似语法分析&#xf…

软件工程期末复习(选择+填空+判断)

文章目录 软件工程期末复习一、 选择题 软件工程期末复习 一、 选择题 1.“软件危机”的表现不包括&#xff1a;&#xff08;c&#xff09; A、软件产品不能按期交付 B、用户对“已完成的”软件产品时常不满意 C、程序员越来越供不应求 D、软件项目难以管理&#xff0c;维护困…

东胜物流软件 SQL注入漏洞复现

0x01 产品简介 东胜物流软件是一款致力于为客户提供IT支撑的 SOP&#xff0c; 帮助客户大幅提高工作效率&#xff0c;降低各个环节潜在风险的物流软件。 0x02 漏洞概述 东胜物流软件 TCodeVoynoAdapter.aspx、/TruckMng/MsWlDriver/GetDataList、/MvcShipping/MsBaseInfo/Sav…

CSS3制作3D爱心动画

1、什么是CSS css&#xff0c;即层叠样式表的简称&#xff0c;是一种标记语言&#xff0c;有浏览器解释执行用来使页面变得更美观。 2、选择器 css3中新增了一些选择器&#xff0c;如下&#xff1a; 3、新样式 边框 css3新增了三个边框属性&#xff0c;分别是&#xff1a; bo…