Официальный сайт компании Arduino по адресу arduino.cc
IEEE-754 отображение float
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 20/12/2019 - 23:03
Добрый день,
Подскажите по конвертации, имеем 4 байта 0x436b580e, по правилам IEEE-754 в DEC float должно быть 235.344. Как заставить float заставить отобразить правильно это число? Пробую разные варианты получается 1131108352.00
Побуду Дедом Морозом.
Супер! спасибо большое. Не хватало этой
float
* ptrFloat
звездочки у меня. А что она значит? когда используется?Коль такая новогодняя шара, спрошу еще, если у меня два uint16_t, как лучше их объединить? чтобы конвертировать во float
Супер! спасибо большое. Не хватало этой
float
* ptrFloat
звездочки у меня. А что она значит? когда используется?https://prog-cpp.ru/c-pointers/
Зависит от того что и как в этих uint16_t хранится. Например если сделать так:
То в l получим 0x12345678
если у меня два uint16_t, как лучше их объединить? чтобы конвертировать во float
Чую запах модбаса, который несёт данные с электросчётчика. Что за модель?
если у меня два uint16_t, как лучше их объединить? чтобы конвертировать во float
Чую запах модбаса, который несёт данные с электросчётчика. Что за модель?
Да, в точку)) DDS578R в пути еще, пока по мануалу разбираюсь. Прикрутить к домашней сети модбас хочу
Супер! спасибо большое. Не хватало этой
float
* ptrFloat
звездочки у меня. А что она значит? когда используется?https://prog-cpp.ru/c-pointers/
Зависит от того что и как в этих uint16_t хранится. Например если сделать так:
То в l получим 0x12345678
По указателю прочитал, спасибо, доходчиво написано. А то по звездочки не гуглилось.
А по преобразованию также хотел сделать, но нужно проверять.
А то, что sadman41 написал, нужно разбираться. для меня там много не очевидных вещей.
Да, в точку)) DDS578R в пути еще, пока по мануалу разбираюсь. Прикрутить к домашней сети модбас хочу
Ну, удачи. У меня был такой опыт со счётчиком.
Своп регистров понадобится, если все регистры пачкой принять, а потом во флоаты конвертить.
если у меня два uint16_t, как лучше их объединить? чтобы конвертировать во float
Через union. И конвертировать ничего не надо.
Да, в точку)) DDS578R в пути еще, пока по мануалу разбираюсь. Прикрутить к домашней сети модбас хочу
Ну, удачи. У меня был такой опыт со счётчиком.
Своп регистров понадобится, если все регистры пачкой принять, а потом во флоаты конвертить.
Опыт положительный или оказалось игрушкой?
Принимать, конечно, пачкой планирую. А свап в смысле просто старший и младший местами менять или Swap endianness
если у меня два uint16_t, как лучше их объединить? чтобы конвертировать во float
Чую запах модбаса, который несёт данные с электросчётчика. Что за модель?
sadman41, перечитал кучу заметок касаемо union, но так до меня и не доходит, как элемет convertor.u32 получается последовательность двух предыдущих элементов и как convertor.flt преобразуется именно из элемента convertor.u32.
Может не там читаю, тогда буду благодарен за ссылку на источник.
Может не там читаю, тогда буду благодарен за ссылку на источник.
Одна и та же область памяти (4 байта) рассматривается или как uint32_t или как float или как массив uint16_t[2]. То, как компилятор её интерпретирует - зависит от указания имени члена объединения.
Пишем convertor.flt - компилятор рассматривает 4 байта, как float, convertor.u32 - как uint32_t и т.п. То же самое приведение типов указателя, как и в первом примере, только скрытое.
Картинку нашёл только такую:
Спасибо за информацию.
А uint32_t получается можно вообще убрать?
А typedef нужен только для подмены имени типа union?
Можно и убрать, если не нужен для контроля. Использовать typedef - это моя личная заморочка(привычка).
можно и так, без typedef