Интерпретация 32-битного без знака длинной как одиночная точность IEEE-754 Float в C

Я использую компилятор XC32 от Microchip, который основан на стандартном компиляторе C.

Я читаю 32-битное значение с устройства в сети RS485 и сохраняю это в unsigned long, которое я напечатал как DWORD.

т.е.

typedef DWORD unsigned long; 

Как бы то ни было, когда я присваиваю этому значению значение float, значение, которое я получаю, представляет собой, в основном, версию с плавающей запятой целочисленного представления, а не правильный интерпретатор IEEE-754.

т.е.

 DWORD dword_value = readValueOnRS485(); float temp = (float)dword_value; 

Здесь dword_value будет проходить в формате HEX как 0x4366C0C4, который в качестве десятичного числа будет представлен как 1130807492, поэтому приведение этого значения в float просто дает мне 1.130807492 * 10 ^ 9 или 1130807492.0, что я не хочу.

Я хочу, чтобы представление IEEE-754 с одной точностью давало мне значение поплавка 230.75299072265625

Поэтому явное приведение к плаванию не работает. Мне нужен метод, который может преобразовать эту форму мне. Я просмотрел все в библиотеке XC32, и ничего не могу найти.

Кто-нибудь знает о предопределенном методе, который правильно выполняет эту интерпретацию для меня? Или может быть, какой-то предложенный метод я могу написать? Я стараюсь не писать собственный код для этой конкретной задачи, так как я обеспокоен тем, что не нашел эффективного решения, если у C уже есть функция для этого.

Интересно, что если я сделаю это с char *, значение будет показано на этом char * правильно, как 230.75:

 sprintf(random_char_pointer, "%.2f, dword_value); 

Здесь печать random_char_pointer на экран дает мне 230.75, поэтому sprintf должен правильно обрабатывать интерпретацию. Поэтому я предполагаю, что в C уже есть что-то для меня. Может ли кто-нибудь помочь?

    Рекомендуемый способ сделать так, как это, это использовать союз:

     union { DWORD w; float f; } wordfloat; wordfloat.w = dword_value; temp = wordfloat.f; 

    Это делает то, что вы хотите по ISO 9899: 2011 §6.5.2.3 ¶3 сноска 95:

    Постфиксное выражение, за которым следует . оператор и идентификатор обозначает член структуры или объект объединения. Значение имеет значение именованного члена, 95) и является значением lvalue, если первое выражение является lvalue. Если первое выражение имеет квалифицированный тип, результат имеет соответствующую квалификацию типа назначенного элемента.

    95) Если элемент, используемый для чтения содержимого объекта объединения, не совпадает с тем, который использовался последним для хранения значения в объекте, соответствующая часть представления объекта значения интерпретируется как представление объекта в новом типа, как описано в 6.2.6 (процесс, иногда называемый «пингом типа»). Это может быть ловушечное представление.