Forum: Compiler & IDEs Konvertierung HEX-String to float


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.