float in byte

Hallo zusammen,

Ich bin noch ziemlich neu in der Arduino Programmierung, habe aber seit Tagen ein Problem welches ich auch nach Stunden langem Lesen und suchen nicht in den Griff bekommen.

Ich habe einen Float Wert von 4.20

jetzt brauche ich die 4.20 in drei Bytes als hex oder dec.

Byte 1 = (34) für die 4

Byte 2 = (32) für die 2

Byte 3 = (30) für die 0

oder halt in HEX.

Wäre für jede Hilfe sehr dankbar :wink:

Gruß

Thomas

Was willst du mit diesen Bytes genau machen? An einen anderen Controller übertragen?

Schau dir mal an wie Gleitkommazahlen intern funktionieren:

Float hat vier Bytes. Diese erhält man so:

float f = 4.20;
byte* b = (byte*)&f;

for (int i = 0; i < 4; i++)
  Serial.println(b[i]);

Das ist nicht was du beschreibst, aber diese Daten entsprechen der internen Darstellung, sind unabhängig von der Anzahl der Ziffern die man verwendet und lassen sich auch wieder in eine Gleitkommzahl wandeln:

byte b[] { 102, 102, 134, 64 };
float f = *(float*)b;

Ein Alternative ist eine Union aus Float und Byte Array:

union Converter
{
	float f;
	byte b[4];
};

void loop()
{
   Converter converter;
   converter.f = 4.20;

   for (int i = 0; i < 4; i++)
     Serial.println(converter.b[i]);
}

Hallo,

ich muss die 3 Bytes in eine array von 173 bytes schreiben und dann eine checksumme berechnen

Test_array[30] = byte 1. = 34 für 4
Test_array[31] = byte 2 = 32 für 2
Text_array[32] = byte 3 = 30 für 0 oder halt in hex

Scheint mir eine sehr seltsame Anwendung zu sein, da du noch dazu Binär und ASCII durcheinander mischt (deine gewünschten Ergebnisse sind nicht einfach Hex, sondern ASCII!), aber na ja

Am einfachsten und ohne Rundungsverluste beim Rechnen in Kauf zu nehmen geht es vielleicht so:

float f = 4.20;
char buffer[8];
dtostrf(f, 4, 2, buffer);   //in C String wandeln. 4 Zeichen breit. 2 Nachkommastellen

byte b1 = buffer[0];
byte b2 = buffer[2];
byte b3 = buffer[3];

Serial.println(b1, HEX);
Serial.println(b2, HEX);
Serial.println(b3, HEX);

Aber nur wenn es nur eine Stelle vor dem Komma gibt!! Und nur für positive Zahlen. Man kann natürlich auch per strchr() nach dem '.' suchen. Dann wird man flexibler.

Das sieht doch super aus ;D werde es gleich nach der Arbeit testen :wink:

Schon mal ein dickes danke

Gruss
Thomas

1000 Dank, genau das habe ich gesucht :wink:

werde mir jetzt mal http://de.wikipedia.org/wiki/IEEE_754#Zahlenformate_und_andere_Festlegungen_des_IEEE-754-Standards

ans Herzen legen :wink:

Gruß
Thomas