2011-06-30 10 views
0

現在、デバイスからのブルートゥース測定を受け入れるアンドロイドアプリケーションを作っています。データがパッケージ化される方法は4バイトです。これらのバイトのうち2つの値を取得する必要があります。バイト配列のセクションを整数値に変換する

まず値から構成されている:6ビットと最初のバイトのビット0の7ビットバイトのビット2~6

秒の値は単純であり、完全な3バイトから成ります。

これらのビット値にアクセスし、それらを結合して整数値に変換する良い方法はありますか?今、私はバイト配列からビットセットに変換しようとしているし、個々のビットにアクセスして新しいバイトを作成し、整数に変換します。

ありがとうございました。十分に明確でないかどうか尋ねてください。

答えて

1

あなたのフォーマットを正しく理解しているかどうかわかりません。 このビットマスクは最初の値に対応していますか?

0xC07F0000 

ビット16-22,30,31(ここでは、ゼロベースのインデックスが使用されています。つまり、ビット31は最後のビットです)です。

もう1つのことは、あなたの価値は署名されていると思われるのですか?とにかく

、それは私は、あなたは、いくつかのビットマスクで、このようにそれを変換することができます仮定の方法である場合:

unsigned int val = 0xdeadbeef; 

unsigned int mask1 = 0xC0000000; 
unsigned int mask2 = 0x007F0000; 

unsigned int YourValue = (val&mask1)>>23 | (val&mask2)>>16; 

あなたの他の値と同じようにそれを実行してください。ビットマスクを定義し、それを右にシフトします。完了しました。

乾杯

+0

ありがとうございました。唯一のことは、Bluetoothデバイスからの結果をbyte []配列として受け取ることです。これを整数にしてからプロセスを使うことはできますか? – gtdevel

2

私はそれを考え出した:私は、私が記載された方法のポーを用いるこの方法を

public static int byteArrayToInt(byte[] b, int offset) { 
    int value = 0; 
    for (int i = 0; i < 4; i++) { 
     int shift = (4 - 1 - i) * 8; 
     value += (b[i + offset] & 0x000000FF) << shift; 
    } 
    return value; 
} 

を使用してintにバイト配列を変換します。ご協力いただきありがとうございます!

関連する問題