Преобразование 2 uint16_t в 32-плавающий формат IEEE-754 - PullRequest
1 голос
/ 14 января 2020

У меня есть устройства Modbus, которые сохраняют 32-битные значения с плавающей точкой в ​​формате IEEE754. В arduino, который использует C конечно, я могу получить эти значения, разделенные на два 16-битных значения, которые возвращаются в значениях uint16_t. (каждый регистр с устройства Modbus имеет 16-битные значения, поэтому значение делится на два регистра, но библиотека, которую я использую, возвращает uint16_t).

Я сейчас пытаюсь выяснить, как эти два uint16_t объединить в 1 32-разрядное число с плавающей запятой, и я хотел бы получить некоторую помощь, потому что я застрял в том, как преобразовать это в этот тип значения.

Заранее спасибо за вашу помощь.

РЕДАКТИРОВАТЬ:

Для пояснения, вот формат изображения IEEE754

1 Ответ

2 голосов
/ 14 января 2020

Единственный способ обойти строгое алиасинг или недопустимое типовое наказание действительно заключается в использовании std::memcpy:

uint16_t const value[2] = { low_word, high_word };  // Assuming little-endianness
float f;

std::memcpy(reinterpret_cast<void*>(&f), reinterpret_cast<void const*>(value), sizeof f);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...