我从蓝牙获取数据并希望将字节值转换为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
任何人都可以帮我解决这个问题
感谢
答案 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;