4 byte hex mit dem UNO nach IEEE 754 float umrechen

Hallo ich bin neu hier und habe ein, hoffentlich lösbares, Problem.

Ich lese über eine serielle Schnittstelle einen Datenstrom ein der floating-point Messwerte in einem 4 Byte langen HEX-Wert enthält.
Wenn ich diese 4 HEX-Byte auf der Seite IEEE-754 Konverter für Fließkommazahlen eintrage erhalte ich ein plausiebeles Ergebnis.
Eingabe Hexadecimal Representation 0x47265931 - Ausgabe Decimal Representation 42585.19
Eingabe Hexadecimal Representation 0x4402c000 - Ausgabe Decimal Representation 523.0

Auf dem UNO gelingt mir diese Umrechnung nicht, ich erhalte immer unplausiebele Ergebnisse.
Ich habe schon alles mögliche mit Typcasting über double, unsigned long, union's, struct's ect. ausprobiert.
Auch tauschen der Reihenfolge der vier Quellbytes habe ich probiert, aber ohne richtiges Ergebnis.
Ich bin auch über die IEEE754tools.h gestolpert mit denen die Umrechnung evtl. machbar ist aber finde keinen Downloadlink dazu.

Kann mir jemand einen Weg beschreiben der mich zum Ziel führt?
Am liebsten einen fertigen C-Code :cold_sweat:

Viele Grüße
peter

Casten ist schon richtig. Du musst dazu aber den Umweg über einen Pointer nehmen. Einfach die Adresse eines unsigned long nehmen, auf einen float* casten und dereferenzieren

unsigned long i = 0x47265931;
float f = *(float*)&i;

& ist die Adresse des Integers. Diese wird auf einen Zeiger auf float gecastet. Und mit * hat man wieder den Wert.

Das geht genauso wenn du die Werte in einem Byte Array stehen hast. Dann hast du schon einen Pointer auf Byte mit der Array Variable. Diese kannst du dann auf float* casten ohne den "Adresse von" Operator &.

In Visual C++ kommt da 42585.2 raus, aber solche Ungenauigkeiten sind bei 32 Bit Floats normal. Vor allem bei der hohen Anzahl an Vorkommastellen.

Eine Union aus einem Float und einem Byte Array funktioniert auch

Hallo,
hier ist alles was Du brauchst. Die "IEEE754tools.h" steht am Ende.
http://playground.arduino.cc/Main/IEEE754tools
Gruß und Spaß
Andreas

Hey, Danke an alle !!!
Das ging ja schnell und funktioniert wie gewünscht und dann noch so einfach wenn man weiß wie es geht.

Ich wusste es bisher leider nicht.

Gruß
peter

Das mit IEEE754tools.h ist übrigens so gedacht, dass du den Code einfach in eine Datei kopierst. Runterladen muss man da eigentlich nichts.

Hierfür ist das aber Overkill.

Danke nochmal @Serenifly.
Das mit den IEEE754tools hatte ich nach dem Hinweis von SkobyMobil auch so verstanden und den Text einfach in einer Datei namens "IEEE754tools.h" abgespeichert.

Ich verwende die IEEE754tools aber nicht sondern den genialen Zweizeiler von dir in etwas abgewandelter Form weil die 4 Quellbyte rückwärts in einem Byte-Array stehen.