Неожиданное шестнадцатеричное значение для числа с плавающей точкойC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Неожиданное шестнадцатеричное значение для числа с плавающей точкой

Сообщение Anonymous »

Я обнаружил, что получаю неожиданные шестнадцатеричные значения, представляющие числа с плавающей запятой на процессоре ARM STM32H753. Я не могу определить, почему создаются эти шестнадцатеричные значения. Это число с плавающей запятой одинарной точности.
Вот упрощенный код:

Код: Выделить всё

#include 
#include 

int main() {
float setVal = 50000.0f;
uint32_t * val1 = (uint32_t *)((void *) (& setVal));
printf("Float into vSV: %x\r\n", * val1);
}
В реальном коде он запускается в RTOS, поэтому код немного сложнее и вместо printf использует другую функцию, называемую chprintf.
Код в основном предназначен для установки переменной в значение (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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»