2016-06-30 7 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として送信しています。電流と電圧のmAh/mV変換のため、この値は-10000としてBLEから変換されます。これらの値は2バイトに分割され、アプリケーションで-39と-16のバイト値を取得しています。私は以下のようにメソッドにバイトを渡しています。

short yourinteger16 = (short)(((-39 & 0xFF) << 8) | (-16 & 0xFF)); 

しかし、私はyourinteger16の浮動小数点値として9.77という結果を得ています。

誰もがこれについて考えていますか?すべての解決策は私を更新してください。

全コード:あなたは(それぞれ、-10000のためのハイとローバイト)-39および-16 完璧を受けている

protected Integer get8ByteTo16Byte(int firstValue, int secondValue) { 
     Short integerValue = (short)((((byte) firstValue & 0xFF) << 8) | ((byte) secondValue & 0xFF)); 
     return new Integer(integerValue); 
    } 
+0

どのようにしてフロートを作成しますか?その結果得られる短い値は何ですか? – Fildor

+0

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

+1

ああ、ちょっと待ってください...それはHex -39かDec -39ですか? – Fildor

答えて

2

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); 
     } 

方法。

高および低バイトの代わりにORの代わりにadditionを使用してください。 2の補数算術演算を扱うときに負の低バイトが上位バイトのためのトラブルを引き起こしている

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

次のことを試してみてください。

+0

はい、負の値が-10になりました。しかし、正の値と負の値の両方に対して一般化された方法をどのように作成できますか? BLEから動的に変更されることがあります。私たちはその価値を予測することはできません。今、正の価値が問題になっています。 – Nithinjith

+0

あなたは-10000を意味しますか? 私はすべての組み合わせを試してみました:私はしません '-39および-16利回り-10000' 39と16利回り10000 ' -39と16利回り-9968' 39と-16利回り9968. 例外を参照してください。あなたのために働いていない組み合わせはどれですか? –

+0

はい、あなたの答えは正の値も正しいです。ありがとう、Sahil Bajaj。 – Nithinjith

関連する問題