代码之家  ›  专栏  ›  技术社区  ›  rynop

BLE GATT:为什么以整数类型存储小数?

  •  1
  • rynop  · 技术社区  · 7 年前

    我正在学习蓝牙,特别是如何实现 GATT characteristic specs 所以我可以编写外围驱动程序。在几乎所有规范中,他们都希望使用整数数据类型来保存十进制值(当数据是十进制值时)。

    例如 Cycling Power Measurement spec Pedal Power Balance 变成一个 uint8 踏板功率平衡 值的分辨率为1位小数(例如: 10.1 format types spec 小数有很多类型( float32

    我正在编写NodeJs代码来快速证明一些技术。根据我的假设,我猜一个是如何将一个精度为一位的小数“打包”成一个有符号的8位整数的。我在这里使用加速度(可以是+/-,所以使用符号int):

    '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

    1. 关贸总协定是否使用这种“包装”技术来节省空中空间?
    2. 我做得对吗?
    3. NodeJS是否有一个库来处理这种数据打包和取消打包?似乎是一种非常常见的情况。我搜索过NPM,但我不确定这个概念叫什么。
    1 回复  |  直到 7 年前
        1
  •  1
  •   Samuel Peter    7 年前

    这样的比例整数用于简化小型嵌入式设备上的实现。

    出于成本和功耗原因,所使用的微控制器通常没有FPU(即浮点计算的硬件支持)。在那些没有FPU的系统上,可以使用软件浮点库,但它们速度很慢(因此会消耗能量),并且会占用代码空间。即使在具有FPU的微控制器上,使用它也会增加功耗,使用四个字节作为浮点数也会增加RAM使用量(另一种稀缺资源),而缩放整数版本只有一个字节。