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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.