2017-02-09 110 views
0

我試圖將2字節浮點數值0123.轉換爲我的項目的雙精度值。JAVA /如何將2字節浮點數轉換爲雙精度值

當我模擬該值時,我得到了28.2。 那麼如何將這個2字節的float值轉換爲java上的double值呢?

感謝您的幫助!

+1

浮點數是4個字節,而不是2個。雙數是8個字節。這個神祕的2字節浮點數是什麼? – Kayaman

+0

傳統IEEE浮點標準中的28.2是0x41e1999a。什麼標準生成2個字節?這個「浮動」來自哪個源系統/體系結構? –

+0

我嘗試將來自KNX總線通道的2字節浮點值轉換爲double值.KNX在使用Java時發送2字節浮點數。 – rdvnbl

回答

1

請看下面庫:

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

它提供了一個Java API的KNX網絡及其數據類型。這很可能會做你想要的 - 特別是tuwien.auto.calimero.dptxlator.DPTXlator2ByteFloat類。

您可以使用此代碼:

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(); 

value變量將有28.2價值預期。

導入你的Maven依賴下面包括圖書館:

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

希望這有助於。

+0

floatTranslator.setData(test);方法需要一個更多的參數稱爲偏移量。當我將0作爲偏移量時,它可以工作。 感謝您的幫助。 – rdvnbl

+0

@rdvnbl是的,有兩個重載的方法,稱爲'setData'。一個有偏移量,一個沒有。鑑於這是家庭自動化,你可能會收到一串數據,你需要跟蹤偏移量。我只是爲了清晰起見而選擇了最簡單的實現。另外,請注意構造函數的'DPTXlator2ByteFloat.DPT_XXX'參數 - 這很重要,您必須爲傳感器字節流選擇正確的參數。 –

相關問題