-2

400 バイトなどのバイト配列と、6 などのビットの位置があります。このビットの値が 1 かどうかを確認するにはどうすればよいですか? したがって、私の例では、戻り値は true になります。

例:

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

00000100 とは何ですか.... pos = 6 結果 = true

4

3 に答える 3

0

次のようにビットを数えるように見えます。

ビット 1 は最初のバイトの最上位ビット、ビット 8 は最初のバイトの最下位ビット、ビット 9 は 2 番目のバイトの最上位バイトなどです。

次に、次を使用できます。

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 番目のバイトの最下位ビットになるようにすると、 on) は次のようになります。

private boolean isSet(int index) {
    int bitIndex = index % 8;
    int byteIndex = index / 8;
    int bitMask = 1 << bitIndex;
    return (b[byteIndex] & bitMask) > 0; 
}
于 2012-05-09T10:55:27.567 に答える