请参阅问题tf permission。 我得到了这样的答案
short yourinteger16 = (short)(((-39 & 0xFF) << 8) | (-16 & 0xFF));
这个答案对于正数是正确的。但在负数的情况下,它失败了。
例如,我将来自BLE的值作为-10发送到应用程序。由于电流和电压的mAh / mV转换,该值将从BLE转换为-10000。这些值被分成两个字节,我在我的应用程序中得到字节值为-39和-16。我将字节传递给方法,如下所示。
Integer ampValue = null;
if (mBleDataHashMap.containsKey(SuperMuttBleConst.RESP_I_HIGH) &&
mBleDataHashMap.containsKey(SuperMuttBleConst.RESP_I_LOW)) {
ampValue = get8ByteTo16Byte(mBleDataHashMap.get(SuperMuttBleConst.RESP_I_HIGH),
mBleDataHashMap.get(SuperMuttBleConst.RESP_I_LOW));
}
if (ampValue != null) {
float newAmp = ampValue.floatValue();
newAmp = newAmp/1000;
mAmpTextvw.setText("" + newAmp);
}
但是我得到的结果为9.77,作为你的整数16的浮动值。
有人对此有任何想法吗?任何解决方案请更新我。
完整代码:
protected Integer get8ByteTo16Byte(int firstValue, int secondValue) {
Short integerValue = (short)((((byte) firstValue & 0xFF) << 8) | ((byte) secondValue & 0xFF));
return new Integer(integerValue);
}
方法
{{1}}
答案 0 :(得分:2)
您完全接收-39和-16 (分别为-10000的高字节和低字节)。
使用addition
代替OR
高字节和低字节。
请尝试以下
short result = (short) (((short)(-39 & (byte)0xFF) << 8) + (short)(-16 & (byte)0xFF));
当处理2的补码运算时,负的低字节会导致高字节出现问题。