2016-06-30 4 views
2

См. Вопрос 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); 
    } 
+0

Как вы создаете поплавок? Какова конечная короткая стоимость? – Fildor

+0

Integer integerValue = ((((byte) firstValue & 0xFF) << 8) | ((byte) secondValue & 0xFF)); float newAmp = integerValue .floatValue(); – Nithinjith

+1

А, подождите минутку ... Это Hex -39 или Dec -39? – Fildor

ответ

2

Вы получили -39 и -16 отлично (высокие и низкие байты для -10000, соответственно).

Использовать addition вместо OR Ввод верхнего и нижнего байтов. Пожалуйста, попробуйте следующее

short result = (short) (((short)(-39 & (byte)0xFF) << 8) + (short)(-16 & (byte)0xFF)); 

Негативные низкие байты вызывающую проблемы для старшего байта при работе с 2 с дополнением арифметика.

+0

Да, теперь отрицательное значение становится равным -10. Но как мы можем создать обобщенный метод как для положительной, так и для отрицательной ценности? Он может динамически меняться от BLE. Мы не можем предсказать значение. Теперь положительная ценность вызывает проблемы. – Nithinjith

+0

Вы имеете в виду ... -10000? я пытался со всеми комбинациями: '-39 и -16 Урожайность -10000' 39 и 16 Урожайность 10000 ' -39 и 16 выходов -9968' 39 и -16 урожаи 9968. Я не см. любые исключения. Какая комбинация не работает для вас? –

+0

Да, ваш ответ правильный и для позитивных значений. Спасибо, Сахил Баджадж. – Nithinjith

Смежные вопросы