【物联网开发】、【小程序蓝牙通讯数据校验】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

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图