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

问题:

  • 关贸总协定是否使用这种“包装”技术来节省空中空间
  • 我这样做对吗
  • NodeJS是否有一个库来处理此数据打包和取消打包?这似乎是很常见的情况。我搜索过NPM,但我不确定这个概念叫什么

  • 这样的缩放整数用于简化小型嵌入式设备上的实现

    出于成本和功耗原因,所使用的微控制器通常没有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);