IEEE-11073 - это широко используемый формат в медицинских устройствах. В таблице, которую вы цитировали, есть все для декодирования чисел, хотя на первый взгляд может быть трудно ее расшифровать.
Давайте рассмотрим первый пример, который у вас есть: 0xFF00016C
. Это 32-разрядное число, и первый байт является показателем степени, а последние три байта являются мантиссой. Оба кодируются в представлении дополнения 2:
- Экспонент,
0xFF
, в дополнении 2 это число -1
- Мантисса,
0x00016C
, в дополнении 2 это число 364
(Если вы не совсем уверены, как числа кодируются в дополнении 2, задайте это как отдельный вопрос.)
Следующее, что мы делаем чтобы убедиться, что это не «специальное» значение, как указано в вашей таблице. Поскольку у вас есть показатель не 0
(это -1
), мы знаем, что вы в порядке. Таким образом, никакой специальной обработки не требуется.
Поскольку значение не является специальным, его значение c просто: mantissa * 10^exponent
. Итак, у нас есть: 364*10^-1 = 36.4
, как показывает ваш пример.
Ваш второй пример похож. Показатель степени 0xFE
, и это число -2
в дополнении 2. Мантисса равна 0x000D97
, то есть 3479
в десятичном виде. Опять же, показатель не равен 0, поэтому никакой специальной обработки не требуется. Итак, у вас есть: 3479*10^-2 = 34.79
.
Вы говорите для значения 98.5
, вы получаете байтовый массив [113, 14, 0, 254]
. Давайте посмотрим, сможем ли мы понять это. Ваш байтовый массив, написанный в шестнадцатеричном формате: [0x71, 0x0E, 0x00, 0xFE]
. Я предполагаю, что вы получаете эти байты в «обратном» порядке, так что в качестве 32-разрядного шестнадцатеричного числа это на самом деле 0xFE000E71
.
Мы действуем аналогично: экспонента снова -2
, так как 0xFE
это то, как вы пишете -2
в дополнении 2 с использованием 8-бит. (См. Выше.) Мантисса равна 0xE71
, что равно 3697
. Итак, число: 3697*10^-2 = 36.97
.
Вы утверждаете, что на самом деле это 98.5
. Я думаю, что вы читаете это в градусах Фаренгейта, а ваше устройство сообщает в градусах Цельсия. Если вы сделаете математику, вы обнаружите, что 36.97C = 98.55F
, что достаточно близко. Я не уверен, как вы получили число 98.5
, но с такими устройствами, как этот, этот результат, кажется, в точности, как вы можете ожидать.
Надеюсь, это поможет!