Вот упрощенный код:
Код: Выделить всё
#include
#include
int main() {
float setVal = 50000.0f;
uint32_t * val1 = (uint32_t *)((void *) (& setVal));
printf("Float into vSV: %x\r\n", * val1);
}
Код в основном предназначен для установки переменной в значение (50000.0f), получения адреса, приведения его к uint32_t, а затем распечатки 4 байтов uint32_t.
Напечатанный результат: 40E86A00. Однако я ожидаю, что будет напечатано 47435000. Я ожидаю, что это значение основано на использовании https://gregstoll.com/~gregstoll/floattohex/ для преобразования 50000,0 в шестнадцатеричное значение.
У меня также есть некоторый библиотечный код, который отправляет число с плавающей запятой через UART. Данные, передаваемые по UART, также имеют вид 40E86A00 (но с измененным порядком байтов из-за порядка байтов).
Если я запускаю этот код на ПК с Linux на базе Intel, то результатом будет 47435000, что соответствует моим ожиданиям.
Что мне не хватает?
Подробнее здесь: https://stackoverflow.com/questions/798 ... -for-float
Мобильная версия