IEEE Double Float converter Kategorie: Programmierung (von Newbie - 3.09.2012 11:35) | ||
| ||
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) |