Получить float в формате HEX - PullRequest
0 голосов
/ 08 мая 2020

У меня есть строка char str [8]. Он говорит число в формате HEX. Плавучий и со знаком. Как я могу записать его в переменную типа float?

Например:

char str[9] = "41700000\0";

Мне нужно получить val от этого: 15.0

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Вы можете набрать данные:

  1. Используя memcpy
unsigned int u = 0x41700000;
float f;

memcpy(&f, &u, sizeof(f));
printf("%f\n", f);
Использование объединения (закон ИМО, многие люди имеют противоположное мнение)
union un
{
    float f;
    unsigned u;
};

void foo(unsigned x)
{
    union un a = {.u = x};
    printf("%f\n", a.f);
}

Я предполагаю, что числа с плавающей запятой && имеют одинаковый размер.

Конечно, вам придется преобразовать строка из вашего вопроса в значение без знака - но это относительно просто (scanf, atoi ....)

PS Кстати, многие компиляторы будут генерировать один и тот же код для обоих (без вызова memcpy) https://godbolt.org/z/VaCcxS

1 голос
/ 08 мая 2020

Это быстрый и грязный способ вернуть ваши 15 назад из шестнадцатеричного 4-байтового представления. Однако в этом слишком много плохого, чтобы даже начать об этом говорить, и правильнее было бы спросить себя: «Зачем мне это нужно для начала и как я могу сделать что-то лучше вместо этого».

float hexStrToFloat(const char* str)
{
    union { unsigned int i; float f; } tmp;
    sscanf_s(str, "%x", &tmp.i);
    return(tmp.f);
}

Сноска: предполагается машина с прямым порядком байтов, 32 бита или выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...