如何将二进制指数-10转换为浮点数?

时间:2016-02-21 03:58:45

标签: ios swift bluetooth binary exponent

我在iOS上使用蓝牙低能耗设备,Swift接收一些数据。所述数据在https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.csc_measurement.xml中指定为uint16。它使用二进制指数表示,但我找不到如何将其转换为浮点数,以便进一步使用它。

  

最后一轮事件时间信息:单位的分辨率为1 / 1024s。

     

单位:org.bluetooth.unit.time.second

     

指数:二进制,-10

我认为只计算10位并使用第一个段作为小数点之前的部分而第二个段作为之后的部分。但结果似乎不对。

非常感谢任何提示或解决方案。

非常感谢。

2 个答案:

答案 0 :(得分:4)

二进制指数-10与将uint16值转换为Double并除以1024.0(或乘以1.0乘以2到10)相同。

答案 1 :(得分:2)

通过hotpaw2进一步扩展上述答案 -

常规

Exponent: Binary, 0 => 001 => 1 decimal Exponent: Binary, -1 => 0.1 => 1/(2^1) => 1/2 => 0.5 decimal Exponent: Binary, -2 => 0.01 => 1/(2^2) => 1/4 => 0.25 decimal Exponent: Binary, -3 => 0.001 => 1/(2^3) => 1/8 => 0.125 decimal

现在针对您在Bluetooth SIG规范中针对循环功率测量特性定义的特定情况

最后一轮事件时间信息:单位的分辨率为1 / 1024s。

单位:org.bluetooth.unit.time.second

指数:二进制,-10

. Exponent: Binary,-10 => 0.0000000001 => 1/(2^10) => 1/1024 => 0.0009765625 decimal

现在对于来自外围设备/服务器的BLE特征值数据包,分辨率为1 / 1024s:. Last_revolution_event_time

Time(seconds) = Last_revolution_event_time * 1/1024