Forum: Compiler & IDEs Float-4Byte-Float


von Toni (Gast)


Lesenswert?

Hallo.

Ich habe ein kleines Problem und zwar:

Ich möchte eine Variable vom Typ Float in
4 Bytes zerlegen, im I2C EEPROM ablegen,auslesen und
am Display anzeigen.

Das Problem ist nicht das Senden und Empfangen,sondern
das Umwandeln der float variable in die 4 Bytes bzw. umgekehrt.

Lg Toni.

von Daniel Jelkmann (Gast)


Lesenswert?

Hi Toni!

Ich weiss nicht ob es gerade die einfachste und schönste Lösung ist,
aber Du könntest das Konvertieren zum Beispiel so machen:

// float in 4 bytes zerlegen
float x = 3.141596;
unsigned char * float_pointer = (unsigned char*)&x;
unsigned char b[4];

b[0] = *float_pointer++;
b[1] = *float_pointer++;
b[2] = *float_pointer++;
b[3] = *float_pointer++;

// und die 4 bytes wieder zu einem float zusammensetzen
float y;
float_pointer = (unsigned char*)&y;

*float_pointer++ = b[0];
*float_pointer++ = b[1];
*float_pointer++ = b[2];
*float_pointer++ = b[3];

// zur Kontrolle ausgeben
printf("%e  %e\n", x, y);



Dabei wird einfach über einen Zeiger auf den Speicherplatz des Floats
zugegriffen und die Werte der 4 Bytes der Reihe nach ausgelesen und in
das Array b gespeichert. Das Rückschreiben funktioniert genauso, nur
sind die Zuweisungen andersherum...

MfG
  Daniel Jelkmann

von Daniel Jelkmann (Gast)


Lesenswert?

Hi nochmal,

das printf(); hatte ich übrigens nur zur Kontrolle reingesetzt, um zu
verifizieren, dass der Code auch macht was er soll... Das printf() gibt
Text auf der Standardausgabe aus, beim AVR wird das mit dem printf()
daher wohl schwierig ;) einfach wegdenken die Zeile...

MfG
  Daniel Jelkmann

von Toni (Gast)


Lesenswert?

Hi Daniel.

Danke für deine rasche Hilfe.

Habe soeben deinen Teil ausprobiert.
Funktioniert.

Lg Toni.

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.