uniapp解析蓝牙设备响应数据bug

ops/2024/11/18 3:34:49/

本文章为了解决《uniapp 与蓝牙设备收发指令详细步骤(完整项目版)》中第十步的Array 解析成 number函数bug

1、原代码说明

function array16_to_number(arrayValue) {const newArray = arrayValue.filter(item => String(item) !== '00' || String(item) !== '0')const _number16 = newArray.map(hex => parseInt(hex, 16).toString(16)).join('')return parseInt(`0x${_number16}`)
}

该函数用于将16进制的数组转成10进制数字。
在这里插入图片描述

2、Bug场景:日期

对于大多数场景的转换都能正常实现,但是对于日期场景则会出现异常,并且并不是每次都会出现解析错误。

2.1 例子1

在这里插入图片描述
经过原函数转换结果为107925822

但是!!!,如下图十六进制的内容660ed13e,其十进制的结果应该为1712247102
在这里插入图片描述

结论: 由于parseInt函数解析的时候会忽略字符串前面的0。

2.2 例子2

已数组['66','e0','d1','00']为例,经过原函数的转换得到结果如下图,为107875600
图1
但实际的十进制结果如下图所示,为1726009600
在这里插入图片描述
这个问题为原代码逻辑问题,在函数中已经过滤了00格式的值。因此根据需要确定是否需要移除该代码。(若函数引用次数多,直接移除可能导致其他问题)

const newArray = arrayValue.filter(item => String(item) !== '00' || String(item) !== '0')

3、最新代码说明(推荐方式)

由于array16_to_number()需要处理的数组中确实需要移除00元素的值,因此采用新增参数的方式 优化函数,然后在解析日期的位置进行特殊处理即可。

/*** 将16进制数组转换成数字* @param {Object} arrayValue 16进制的数组* @param {Object} notFilter 是否保留数组中值为 00 的元素;可以传入任何值,建议传入 true,否则不需要传值*/
function array16_to_number(arrayValue, notFilter) {let newArray = arrayValue.filter(item => String(item) !== '00' || String(item) !== '0')// 有些部分功能不需要将 00 的元素移除if(notFilter) newArray = arrayValueconst _number16 = newArray.map(hex => {let t_str_numer = parseInt(hex, 16).toString(16)// 解决零开头的值会被解析错误,例如:hex=0a,最后会被解析为a// 将长度不为2的内容,使用0在字符串前面进行填充return t_str_numer.length < 2 ? t_str_numer.padStart(2, '0') : t_str_numer}).join('')return parseInt(`0x${_number16}`)
}

使用最新函数处理以上两个例子结果如下。
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/ops/134216.html

相关文章

OpenWebUI,RAG+外部知识库+AI写文的开源应用

引言 自从去年AI火起来之后&#xff0c;很多人便热衷于寻找适合自用的AI开源项目&#xff0c;把各家大模型API接入到自己的AI程序里&#xff0c;便可以通过AI辅助完成一系列日常任务&#xff0c;比如内容翻译/润色/总结/撰写、格式转换、数据分类、代码分析、角色扮演等等。 …

江协科技之STM32驱动1.3寸/0.96寸/0.91寸OLED显示屏介绍

目录 编码介绍 ASCII码 汉字编码 取模软件 江协科技OLED库适用器件 SSD1306简介 模块引脚更改 0.91寸OLED适配 模块驱动必备知识 驱动代码 OLED_Font.h OLED.h OLED.c 编码介绍 ASCII码 ASCII码是一套数字到字符的映射标准&#xff0c;它规定了用什么数字表示…

XML Schema 字符串数据类型

XML Schema 字符串数据类型 1. 概述 XML Schema 是一种用于定义 XML 文档结构和内容的语言。它提供了一种强大的机制来描述 XML 数据的类型、结构和约束。在 XML Schema 中&#xff0c;字符串数据类型是一种基本数据类型&#xff0c;用于表示文本数据。 2. 字符串数据类型 …

生成自签名证书并配置 HTTPS 使用自签名证书

生成自签名证书 1. 运行 OpenSSL 命令生成证书和私钥 在终端中输入以下命令&#xff0c;生成自签名证书和私钥文件&#xff1a; sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout self_signed.key -out self_signed.pem-x509&#xff1a;生成自签名证书。…

【人工智能】从零开始实现K-Means聚类:Python手动实现与算法原理详解

解锁Python编程的无限可能&#xff1a;《奇妙的Python》带你漫游代码世界 K-Means是一种常用的无监督学习算法&#xff0c;广泛应用于数据聚类分析。本文将详细讲解K-Means的数学原理&#xff0c;包括目标函数和算法的迭代过程&#xff0c;阐述算法如何通过迭代优化簇的质心位…

初识Linux · 信号产生

目录 前言&#xff1a; 预备知识 信号产生 前言&#xff1a; 前文已经将进程间通信介绍完了&#xff0c;介绍了相关的的通信方式。在本文介绍的是信号部分&#xff0c;那么一定有人会有问题是&#xff1a;信号和信号量之间的关系是什么呢&#xff1f;答案是&#xff0c;它们…

036集——查询CAD图元属性字段信息:窗体显示(CAD—C#二次开发入门)

提取CAD图元所有属性字段&#xff0c;通过窗体显示&#xff0c;效果如下&#xff1a;&#xff08;curve改为entity&#xff09; 代码如下&#xff1a; public void 属性查询() {List<Curve> ents Z.db.SelectEntities<Curve>();if (ents is null ||ents.Cou…

如何绕过Captcha并使用OCR技术抓取数据

背景/引言 在现代的网页数据抓取中&#xff0c;Captcha&#xff08;全自动区分计算机和人类的图灵测试&#xff09;作为一种防止爬虫和恶意访问的有效措施&#xff0c;广泛应用于各种网站。Captcha的主要目的是区分用户是人类还是程序&#xff0c;因此对于爬虫技术来说&#x…