Node.js BLE GATT:为什么以整数类型存储十进制?
我正在学习蓝牙,特别是如何实现,这样我就可以编写外设驱动程序。在几乎所有规范中,它们似乎都使用整数数据类型来保存十进制值(当数据是十进制值时) 例如,规范将Node.js BLE GATT:为什么以整数类型存储十进制?,node.js,bluetooth,type-conversion,gatt,Node.js,Bluetooth,Type Conversion,Gatt,我正在学习蓝牙,特别是如何实现,这样我就可以编写外设驱动程序。在几乎所有规范中,它们似乎都使用整数数据类型来保存十进制值(当数据是十进制值时) 例如,规范将踏板功率平衡存储到uint8中。如您所见,踏板功率平衡值的分辨率为小数点后1位(例如:10.1)。关贸总协定有许多小数类型(float32etc) 关贸总协定为什么不使用设计用于保存十进制数字的数据类型?我的猜测是限制通过BLE发送的数据的大小。对吗 我正在写NodeJs代码来快速证明一些技术。根据我的假设,我猜一个是如何将一个精度为一位数的
踏板功率平衡
存储到uint8
中。如您所见,踏板功率平衡
值的分辨率为小数点后1位(例如:10.1
)。关贸总协定有许多小数类型(float32
etc)
关贸总协定为什么不使用设计用于保存十进制数字的数据类型?我的猜测是限制通过BLE发送的数据的大小。对吗
我正在写NodeJs代码来快速证明一些技术。根据我的假设,我猜一个是如何将一个精度为一位数的十进制“打包”成一个有符号的8位整数的。我在这里使用加速度(可以是+/-,所以使用符号int):
运行此命令会像我预期的那样输出-9.8
问题:
这样的缩放整数用于简化小型嵌入式设备上的实现 出于成本和功耗原因,所使用的微控制器通常没有FPU(即,硬件支持浮点计算)。在那些没有FPU的系统上,可以使用软件浮点库,但它们速度慢(因此会消耗电力),并且会占用代码空间。即使在有FPU的微控制器上,使用FPU也会增加功耗,使用四个字节作为浮点数也会增加RAM的使用(另一种稀缺资源),而缩放整数版本只有一个字节 由于这些原因,在嵌入式世界中,当需要分数数量时,使用缩放整数是标准 在GATT特性的情况下,使用较小的数据类型也是可取的,因为您通常希望特性的值不超过20字节。这是因为ATT MTU通常设置为23字节(ATT的开销为3字节),因为这是可以包含在单个链路层数据包中的最长ATT数据包(如果未实现蓝牙4.2的数据长度扩展)
'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);