2016-10-22 57 views
0

我從藍牙獲取數據,並希望字節的值,int和顯示結果轉換成浮動的,我已經寫了下面的代碼沒有得到應有的價值轉換成int從字節值

String prob1Str = manufactureData.substring(20, 24); // prob1Str = FE70 

float prob1Temp = (Integer.parseInt(prob1Str,16)&0xffff); // Here I am getting prob1Tem = 65136.0 instead of -400.0 
model.setProb1Temp(prob1Temp); 

從上面的代碼我越來越prob1Tem = 65136.0,而不是-400.0

任何人可以幫助我如何解決這個

感謝

+0

'prob1Str = FE70'您正在調用一個字節值。但實際上你有一個字符串,其中包含兩個字節值的十六進制表示。 – greenapps

回答

1

只需將結果簡寫爲short!

float prob1Temp = (short)Integer.parseInt(prob1Str, 16); 

int是32位,所以0x0000FE70 = 65136,它是一個正值!

短爲16位,0xFE70 = -400,您將重寫它爲int或浮動後。

查看that explanation瞭解更多詳情。

+0

java.lang.NumberFormatException:值超出範圍:「FE70」 –

+0

float prob1Temp =(Short.parseShort(prob1b + prob1a,16)&0xffff); –

+0

非常感謝你jbaptperez –

0
Integer.parseInt("FE70", 16) <<16>> 16 

將正確地擴展符號位。或者同樣不那麼棘手,並且不受整數大小的限制:

int i = Integer.parseInt("FE70", 16); 
if (i >= 0x8000) i -= 0x10000;