概述
Flutter项目中使用蓝牙测量产品深度,需要将测量结果在App中显示。
详情
数据
蓝牙测量数据为30.90,返回的数据为长度为8的16进制数组,如上图所示。其中第4、5、6、7为测量数据,其他数据为蓝牙协议的其他数据,现要求将[0,0,12,18]测量数据转换为30.90后显示在手机上。方法有很多,可以在Android/iOS将数据先转换为十进制后再传给flutter,本文则是在flutter端转换。
转换
- 将源数据转换为Uint8List
Uint8List uint8list = Uint8List.fromList([2,0,255,0,0,12,18,1]);
- 截取测量数据
Uint8List subList = Uint8List.sublistView(uint8list , 3, 7);
subList为[0,0,12,18]。
- 复制数组
Uint8List resultList = Uint8List.fromList(subList);
- 转换为字节序列
ByteData byteData = ByteData.view(resultList.buffer);
- 得到结果
int result = byteData.getInt32(0);
最后得到结果为3090,将其进行单位换算得到30.90。
第三步复制数组好像多余,其实不然,若缺少第三步,最终结果则会得到一个不等于309的极大数据。 详细原因还在深究中…。
|