我正在学习蓝牙,具体如何实现GATT characteristic specs,所以我可以写周边驱动程序。在几乎所有的规格中,他们都希望使用整数数据类型来保存十进制值(当数据是十进制值时)。BLE GATT:为什么要在整数类型中存储小数?
例如,Cycling Power Measurement spec规范将Pedal Power Balance
存储为uint8
。如您所见,Pedal Power Balance
值的分辨率为1位小数(例如:10.1
)。 GATT format types spec有很多类型的小数点数(float32
等)。
为什么GATT不使用设计用来保存十进制数字的数据类型?我的猜测是限制通过BLE发送的数据的大小。那是对的吗?
我正在写NodeJs代码来快速证明一些技术。用我的假设,这里是我猜测如何用一个精确的数字“打包”一个十进制数字为有符号的8位整数。我使用的加速度这里(可以+/-所以使用符号整数):
'use strict';
const oneG = -9.806649999788;
let int8Buf = new Buffer.alloc(8); //to hold signed 8-bit integer
int8Buf.writeInt8(oneG * 10, 0);
console.log(int8Buf.readInt8(0)/10);
运行此输出-9.8
如我所料。
问题:
- 不GATT用这种 “包装” 技术,以节省空间,在空中?
- 我正确地做这件事吗?
- 是否NodeJS有一个库来处理这个数据打包和解包?似乎是一种非常常见的情况。我已经搜查了NPM,但我不确定这个概念被称为什么。