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

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

1、原代码说明

js 复制代码
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

但实际的十进制结果如下图所示,为1726009600

这个问题为原代码逻辑问题,在函数中已经过滤了00格式的值。因此根据需要确定是否需要移除该代码。(若函数引用次数多,直接移除可能导致其他问题)

js 复制代码
const newArray = arrayValue.filter(item => String(item) !== '00' || String(item) !== '0')

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

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

js 复制代码
/**
 * 将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 = arrayValue
	
	const _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}`)
}

使用最新函数处理以上两个例子结果如下。

相关推荐
xieter14 分钟前
【技术精选】深入浅出现代前端渲染与性能优化实践指南 (2026-10-04)
前端·javascript
计算机魔术师19 分钟前
Anthropic 密会宗教领袖谈 Claude 意识,OpenAI 为什么急眼
前端
xieter19 分钟前
【硬核实战】TypeScript Compiler API: Preserving Child Node Narrowing in Reusable Type Guards 🔧 (2026-10-03)
前端·javascript
xieter23 分钟前
【硬核实战】React 19 useFormStatus Returning False? I Built a SubmitButton That Fixes It (2026-10-03)
前端·javascript
Data analyse4562 小时前
Cookie过期引发UV上涨的复核方法
服务器·前端·数据分析·uv
Highcharts.js2 小时前
图表开发实战总结| 7 条“黄金法则”与“性能铁律”
前端·javascript·vue.js·编辑器·时序数据库·highcharts
Helix2502 小时前
Electron、WebView 框架与 HTA 对比:桌面应用选型、安全性与现代替代方案
前端·javascript·electron·webview·vbscript·hta·本地html应用
开开心心就好3 小时前
办公软件卸载不干净?专用工具一键清残留
java·前端·人工智能·智能手机·kafka·excel·memcache
静默回滚3 小时前
图片能显示,画进canvas却空白:像素面积上限
前端
补码缩写3 小时前
canvas大图内存怎么算:宽×高×4只是第一份
前端