2017-02-09 3 views
0

Ich versuche 2 Byte Float-Wert zu konvertieren, der 0D 82 ist, um den Wert auf meinem Projekt zu verdoppeln.JAVA/Wie 2-Byte Float in den doppelten Wert konvertieren

Wenn ich diesen Wert simuliert habe, bekomme ich die 28.2. Also, wie kann ich diesen 2 Byte Float-Wert in Double-Wert auf Java konvertieren?

Danke für jede Hilfe!

+1

Floats sind 4 Bytes, nicht 2. Double sind 8 Bytes. Was ist das mysteriöse 2-Byte-Float? – Kayaman

+0

28,2 im traditionellen IEEE-Float-Standard ist 0x41e1999a. Welcher Standard erzeugt diese 2 Bytes? Aus welchem ​​Quellsystem/welcher Architektur stammt dieser "Float"? –

+0

Ich versuche, diesen 2 Bytes Float-Wert zu konvertieren, der von der KNX-Busspur auf den doppelten Wert kommt. KNX sendet 2 Bytes float, wenn er mit Java arbeitet. – rdvnbl

Antwort

1

Blick auf die folgende Bibliothek:

https://sourceforge.net/p/calimero/wiki/Home/

Es bietet eine Java-API auf den KNX-Netzwerk und seine Datentypen. Dies wird wahrscheinlich tun, was Sie wollen - speziell die tuwien.auto.calimero.dptxlator.DPTXlator2ByteFloat Klasse.

können Sie diesen Code verwenden:

byte[] test = new byte[2]; 
test[0] = (byte)0x0D; 
test[1] = (byte)0x82; 

DPTXlator2ByteFloat floatTranslator = new DPTXlator2ByteFloat(DPTXlator2ByteFloat.DPT_AIR_PRESSURE); 
floatTranslator.setData(test); 
double value = (double)floatTranslator.getValueFloat(); 

die value Variable den Wert 28,2 als erwartet haben.

Importieren Sie die folgenden in Ihrer Maven Abhängigkeiten, die Bibliothek schließen:

<dependency> 
    <groupId>com.github.calimero</groupId> 
    <artifactId>calimero-core</artifactId> 
    <version>2.2-beta</version> 
<dependency> 

Hoffnung, das hilft.

+0

floatTranslator.setData (Test); Methode erfordert einen weiteren Parameter, der als Offset bezeichnet wird. Wenn ich die 0 als Offset setzen, funktioniert es. Danke für Hilfe. – rdvnbl

+0

@rdvnbl Ja, es gibt zwei überladene Methoden namens 'setData'. Eins mit einem Offset, eins ohne. Da dies die Heimautomatisierung ist, werden Sie wahrscheinlich einen Datenstrom erhalten, und Sie müssen den Versatz verfolgen. Ich habe lediglich die einfachste Implementierung aus Gründen der Übersichtlichkeit gewählt. Beachten Sie auch das 'DPTXlator2ByteFloat.DPT_XXX'-Argument für den Konstruktor - dies ist wichtig und Sie müssen das richtige für den Sensor-Byte-Stream auswählen. –