См. Вопрос How to Convert two 8 bit represented byte to single 16 bit represented integer value in Android. я получил ответ, как этотAndroid от 8 бит до 16 бит для отрицательных чисел
short yourinteger16 = (short)(((bytes[0] & 0xFF) << 8) | (bytes[1] & 0xFF));
Этот ответ является правильным для положительного числа. Но в случае отрицательного числа это терпит неудачу.
Например, я отправляю значение из BLE в приложение как -10. Значение будет конвертировать из BLE как -10000 из-за преобразования мА/мВ тока и напряжения. Эти значения разделяются на два байта, и я получаю значение байта как -39 и -16 в моем приложении. Я передаю байт методу, как показано ниже.
short yourinteger16 = (short)(((-39 & 0xFF) << 8) | (-16 & 0xFF));
Но я получаю результат как 9.77 в качестве значения поплавка yourinteger16.
У кого-нибудь есть идеи об этом ?. Любое решение, пожалуйста, обновите меня.
Полный код:
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);
}
Метод
protected Integer get8ByteTo16Byte(int firstValue, int secondValue) {
Short integerValue = (short)((((byte) firstValue & 0xFF) << 8) | ((byte) secondValue & 0xFF));
return new Integer(integerValue);
}
Как вы создаете поплавок? Какова конечная короткая стоимость? – Fildor
Integer integerValue = ((((byte) firstValue & 0xFF) << 8) | ((byte) secondValue & 0xFF)); float newAmp = integerValue .floatValue(); – Nithinjith
А, подождите минутку ... Это Hex -39 или Dec -39? – Fildor