Представление Bluetooth с плавающей запятой

Я пытаюсь реализовать эту характеристику сетки Bluetooth:

<!--
  Copyright 2017 Bluetooth SIG, Inc. All rights reserved.
-->
<Characteristic xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schemas.bluetooth.org/Documents/characteristic.xsd" name="Illuminance" type="org.bluetooth.characteristic.illuminance" uuid="2AFB" last-modified="2017-07-11" approved="Yes">
  <InformativeText>
    <Abstract>
    The Illuminance characteristic is used to represent a measure of illuminance in units of lux.
    </Abstract>
  </InformativeText>
  <Value>
    <Field name="Illuminance">
      <InformativeText>Unit is lux with a resolution of 0.01.</InformativeText>
      <Format>uint24</Format>
      <Unit>org.bluetooth.unit.lux</Unit>
      <Minimum>0</Minimum>
      <Maximum>167772.14</Maximum>
      <DecimalExponent>-2</DecimalExponent>
      <BinaryExponent>0</BinaryExponent>
      <Multipler>1</Multipler>
      <Description>
        A value of 0xFFFFFF represents 'value is not known'. All other values are Prohibited.
      </Description>
    </Field>
  </Value>
</Characteristic>

https://www.bluetooth.com/wp-content/uploads/Sitecore-Media-Library/Specifications/Mesh/Xml/Characteristics/org.bluetooth.characteristic.illuminance.xml. Эта характеристика представляет собой значение люкс в 3 байтах.

Но я не знаю, как мне преобразовать такое значение, как 0x123456, в реальное число с плавающей запятой. Не похоже, что используется стандартный стандарт IEEE 754. Я также не знаю, что они имеют в виду подDecimalExponent а также BinaryExponent.

Может ли кто-нибудь мне помочь? С уважением, Даан

1 ответ

Решение

На странице, на которую вы ссылаетесь, нет плавающей точки. Оно использует-2 с участием DecimalExponentпросто для того, чтобы указать, что 24-битное целочисленное значение, которое в обычном двоичном формате будет некоторым числом x от 0 до 16777 214 (с 16777 215 зарезервировано для "неизвестно"), представляет собой значение x -10-2 люкс в диапазоне от От 0,00 до 167 772,14 люкс. Это фиксированная точка, а не плавающая; точка фиксируется на двух цифрах слева от того места, где она была бы в простом двоичном целочисленном представлении.

Другие вопросы по тегам