我从蓝牙获取数据,并希望将字节值转换为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。
有人能帮我解决这个问题吗?
谢谢
发布于 2016-10-22 07:54:10
只是把你的结果投短了!
float prob1Temp = (short)Integer.parseInt(prob1Str, 16);int是32位,所以0x0000FE70 = 65136,它是一个正值!
短是16位,0xFE 70= -400,您将它重铸为int或浮动之后。
有关更多细节,请查看that explanation。
发布于 2016-10-22 07:43:18
Integer.parseInt("FE70", 16) << 16 >> 16 将正确扩展符号位。或者不太复杂,也不受整数大小的约束:
int i = Integer.parseInt("FE70", 16);
if (i >= 0x8000) i -= 0x10000;https://stackoverflow.com/questions/40189572
复制相似问题