Forum: Compiler & IDEs Konvertierung HEX-String to float


von Rhönschaf (Gast)


Lesenswert?

Hallo,

erst einmal die Grunddaten
Zielcontroller: ESP32
Programmiersprache C

Der Controller bekomt über das Netzwek einen Datenstring mit 8 Zeichen 
(HEX-Darstellung). Diese Zeichen repräsentieren einen 32-Bit float Wert. 
Nun suche ich eine Möglichkeit wie ich diesen Datenstring in einen 
Float-Wert umwandeln kann.

Beispiel:
HEX-String "41B80000"  entspricht Dezimal 23.

Kann mir bitte jemand einen Beispielcode oder einen Lösungsansatz 
beschreiben.

Danke
Rhönschaf

von Sebastian (Gast)


Lesenswert?

Rhönschaf schrieb:
> Kann mir bitte jemand einen Beispielcode oder einen Lösungsansatz
> beschreiben.

Am einfachsten wäre es, die 8 Hexadezimalziffern zunächst in ein uint_32 
zu wandeln, und dann diesen uint_32 als float zu interpretieren, z.B. 
über eine union.

Das funktioniert aber nur wenn die 8 Hexadezimalziffern der unternen 
float-Darstellung auf dem ESP32 entsprechen.

LG, Sebastian

von Rhönschaf (Gast)


Lesenswert?

Hallo Sebastian,

danke, das war der zielführende Hinweis.

Hier mein Code, evtl. können es noch andere gebrauchen.

-----
union conv
 {
     int input;
     float output;
 };

 conv number;
 number.input=strtol("41BC0000", (char**)NULL, 16);

 Serial.println(number.input,HEX);
 Serial.println(number.output);
-------
Der Code funktioniert auf einem ESP32. Aus meiner Sicht wird der Code 
auf einem Atmel Arduino nicht funktionieren, da dort ein Integer nur 
16Bit breit ist.

LG
Rhönschaf

von DerEinzigeBernd (Gast)


Lesenswert?

Rhönschaf schrieb:
> Aus meiner Sicht wird der Code
> auf einem Atmel Arduino nicht funktionieren, da dort ein Integer nur
> 16Bit breit ist.

Dann nimm halt keinen int, sondern einen long. Besser noch: einen 
int32_t.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.