Как разобрать float на слова

Manizzz
Offline
Зарегистрирован: 06.09.2016

Добрый день! Есть класс DHT для работы с датчиками температуры и влажности DHT11, DHT21 и DHT22. Температура и влажность возвращается в float. Как  мне запихнуть в массив uint16_t  array[2] в виде array[1] = младшее слово float, array[2] = старшее слово float.  

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015
Manizzz
Offline
Зарегистрирован: 06.09.2016

Спасибо, но это немного не то что нужно.

negavoid
Offline
Зарегистрирован: 09.07.2016

Вы хотите вот это, но, скорее всего, оно вам тоже на самом деле не нужно.

  float f = 1.2345678e4;
  uint16_t* buff = reinterpret_cast<uint16_t*>( &f );

  Serial.begin( 9600 );
  Serial.println( buff[0], DEC );
  Serial.println( buff[1], DEC );

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Manizzz пишет:

Добрый день! Есть класс DHT для работы с датчиками температуры и влажности DHT11, DHT21 и DHT22. Температура и влажность возвращается в float. Как  мне запихнуть в массив uint16_t  array[2] в виде array[1] = младшее слово float, array[2] = старшее слово float.  

не уверен, что правильнол понимаю термин "старшее слово float", но если попытаться разобраться в сути - вам это зачем?

ptr
Offline
Зарегистрирован: 28.05.2016

А может так?

union { float val; struct { uint16_t lw, uint16_t hw; }; } my_storage;

Или так, но слова будут наоборот:

union { float val; uint16_t words[2]; } my_storage;

 

Manizzz
Offline
Зарегистрирован: 06.09.2016

Мне это нужно для того, чтобы запихнуть в регистры modbus регистры.

ptr
Offline
Зарегистрирован: 28.05.2016

А тогда без разницы, в каком порядке будут слова. Ложить будете все равно по одному слову сами.

Manizzz
Offline
Зарегистрирован: 06.09.2016

ptr пишет:

А может так?

union { float val; struct { uint16_t lw, uint16_t hw; }; } my_storage;

Или так, но слова будут наоборот:

union { float val; uint16_t words[2]; } my_storage;

 

Отлично, это похоже что мне нужно. Спасибо большое.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

del