Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

IEEE Double Float converter Kategorie: Programmierung (von Newbie - 3.09.2012 11:35)
Ich nutze:
C-Control II Unit
Ich binde momentan Modbus Devices ein - diese liefern IEEE Double (4byte) also Format.

Diese werden in Big-Endian gesendet und ich lese diese in einen Buffer mit 4 byte ein. Dies soll nun
auf Float konvertiert werden. Da mem nur 8byte float kennt, muss das (?) händisch gemacht werden. Anbei
meine Funktion:

byte buffer[4];  //Beispiel
buffer[0]=0x41;
buffer[1]=0xc9;
buffer[2]=0x00;
buffer[3]=0x00;

int sign;
int exponent;
long value;
float mantissa;
value = mem.getlong(buffer,0);  //Buffer in die 4 byte speichern
sign=-1;
if(value&0x80000000 == 0)      //Wird übersprungen - wieso????
sign = 1;

exponent = ((value&0x7F800000)>>23) - 127;
mantissa = value&0x7FFFFF + 0x800000;
mantissa = mantissa / 0x800000;
test= sign*mantissa * math.pow(2,exponent);

Eigentlich funktioniert alles - nur das Vorzeichen nicht! die Zeile:

if(value&0x80000000 == 0)  gibt offenbar nicht 0

Beispielsweise 0x41c90000 sollte 25.125 ergeben - aber das Vorzeichen stimmt nicht.

Jemand eine Idee wo der Fehler ist? Geht es irgendwie effizienter?

Merci

Mike



    Antwort schreiben


Antworten:

Re: IEEE Double Float converter (von André H. - 3.09.2012 14:01)
    Re: IEEE Double Float converter (von Newbie - 3.09.2012 15:39)