没有从字节值获取正确的int值

时间:2016-10-22 07:38:07

标签: java android

我从蓝牙获取数据并希望将字节值转换为int并将结果显示为float,因为我已编写以下代码

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

任何人都可以帮我解决这个问题

感谢

2 个答案:

答案 0 :(得分:1)

将结果简化为简短!

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

int是32位,所以0x0000FE70 = 65136,这是一个正值!

短是16位,0xFE70 = -400,你将它重新转换为int或者在之后浮动。

请查看that explanation了解更多详情。

答案 1 :(得分:0)

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

将正确扩展符号位。或者同样不那么棘手,不受整数大小的限制:

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