Byte array in float und integer umwandeln

Rosi

Grünschnabel
Hallo zusammen,
ich habe ein problem beim Umwandeln von Byte Werten.

Was ich machen will:
Ich bekomme ueber die Serielle Schnittstelle Daten gesendet, die einen Temperaturmesswert darstellen sollen. Diese Daten werden eingelesen und der Temperaturwert soll gespeichert werden.

Mein Problem:
Ich habe den Protokollframe auseinandergenommen und als Daten bleiben mir dann zwei Felder (mit zwei Feldelementen) vom Datentyp Byte uebrig. Diese sollen nun aber als Float und als Integer gespeichert werden.
Wie kann ich die Byte Felder umwandeln?

Programmierumgebung ist Microsoft Embedded Visual C++ und das Betriebssystem ist Windows CE.

Danke schonmal im vorraus fuer eure Hilfe.
 
Hallo,

wie sind denn diese Byte-Felder definiert? Einen Datentyp byte gibt es bei ISO-C++ nicht. Sind das Felder von chars oder unsigned chars?

Sehe ich das davon mal gesehen richtig, dass die Daten insgesamt vier Bytes belegen? Sollen dann die ersten zwei Bytes in einen float-Wert und die anderen zwei Bytes in einen int-Wert umgewandelt werden?

Grüße,
Matthias
 
Hallo
Die Felder sind vom Datentyp "Byte".
Die vier Feldelemente zusammen ergeben den Temperaturwert.
Es sind nur zwei verschiedene Felder, weil sie nacheinander über den Ethernetport ausgelesen werden.
Es soll letzendlich einmal der gesammte Wert, also alle vier Feldelemente, in float und dann noch in Integer umgewandelt werden, da ich sie zu verschiedenen Bewechnungen brauche.

Grüße
 
Hallo Rosi,
du kannst die 4 Bytes in ein Array packen und dieses dann auf eine float-Variable kopieren. Vorausgesetzt die Bytes sind richtig sortiert, bekommst du dann deinen Temperaturwert. Die Wandlung in einen Integer erreichst du mit einem einfachen Type-Casting. Allerding gehen dann die Nachkommastellen verloren.
C++:
unsigned char pBuffer[] = { 0xB6, 0xF3, 0x9D, 0x3F }; // Wert: 1.234

float fValue;
memcpy(&fValue, pBuffer, sizeof(float)); // Kopieren des Arrays auf eine float-Variable

int nValue = static_cast<int>(fValue); // als int
Gruß
MCoder
 
Hallo,
genau das war es nachdem ich gesucht habe. Funktioniert jetzt.

Vielen Dank fuer eure Hilfe

Gruesse
 
Zurück