2012-05-09 12 views
-2

バイト配列、たとえば400バイト....、次にビットの位置、たとえば6があります。このビットの値1ですか?したがって、私の例では、戻り値はtrueになります。Javaのバイト配列のビットの値を検証する方法

例:

00000100何であるか
final byte[] b = new byte[] { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); 

.... POS = 6 結果=真

+7

private boolean isSet(int index) { int bitIndex = index % 8; int byteIndex = index/8; int bitMask = 1 << bitIndex; return (b[byteIndex] & bitMask) > 0; } 
Iは – keyser

+0

'IF(B [位置] == 1)リターン問題を理解することはできませんtrue; ' – Dandy

+1

達成しようとしているタスクに適したBitSetを使用しないでくださいh? http://docs.oracle.com/javase/6/docs/api/java/util/BitSet.html –

答えて

0

あなたはこのようなあなたのビットをカウントしているかのように見えます:

ビット1は、最初のバイトの最上位ビットで、8ビット、最初のバイトの最下位ビット、ビット9が第二の最上位バイトですバイトなど。

次にあなたが使用することができます。

private boolean isSet(int index) { 
    int bitIndex = (index-1) % 8; 
    int byteIndex = (index-1)/8; 
    int bitMask = 1 << 7-bitIndex; 
    return (b[byteIndex] & bitMask) > 0; 
} 

をしかし、そのビット0は最初のバイトの最下位ビットだったので、あなたは(私のために)インデックスへのより自然な方法を使用した場合の最上位ビット7ビット最初のバイトは、8最下位ビットが、(ようにと)は、第2バイトであろう可能性:

+0

thxたくさん働いています。ビジネス要件 – hudi

0

あなたは、下位バイトにし、アレイ内の位置をカウントするので:

public boolean bitAtPos (byte [] b, int pos) { 
    int el = b[pos/8]; 
    return ((el >> (8-(pos%8)) & 1) == 1); 
} 
+0

hmしかしあなたの最後の行はブール型ではありません – hudi

+0

あなたの答えはたくさん正しいです。このintと1を比較することを忘れてしまいました – hudi

+0

@hudi:ああ、そうです。修正されました。 –

-1
boolean validateValue(byte[] array, int numberToValidate, int position) { 
    return (array.length > position-1 && position >= 1) ? array[position-1] == numberToValidate : false; 
} 

この方法は、任意の数値に複数回使用するのに役立ちますあなたは検証したいと思います。 注:無効な位置をパラメータとして使用すると、falseを返すように、いくつかの事前検証を追加しました。
ベストプラクティスは例外をスローすることですが、私はそれに対処します。

+0

申し訳ありませんが、位置はバイトではないビットの位置なので、この答えは間違っています。私の例では、b [5]は0を返さずに1を返します。 – hudi

+0

私はついにあなたの質問を理解しました。あなたは次回より良い質問をしてみてください... –

+0

b = 4,0,0,0,0、.. so b [5] = 0 – hudi

関連する問題