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

本文主要是介绍【物联网开发】、【小程序蓝牙通讯数据校验】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('');
}

这篇关于【物联网开发】、【小程序蓝牙通讯数据校验】JS CRC-16-MODBUS 验证 高位在前地位在后;JS异或校验;16进制字符串和float互转的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分