Float-4Byte-Float

Gast #76902
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.
Gast #76903
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
Gast #76904
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren