14

私は次のものを持っています:

int num=Integer.parseInt(lineArray[0]);
byte numBit= num & 0xFF;

numBitビット配列に変換する非常に簡単な方法はありますか?またはさらに良いことに、intのバイト変換をバイパスnumしてビット配列に直接移行する方法はありますか?

ありがとう

4

5 に答える 5

13

BitSetが必要な場合は、次を試してください。

final byte b = ...;
final BitSet set = BitSet.valueOf(new byte[] { b });

必要な場合はboolean[]

static boolean[] bits(byte b) {
  int n = 8;
  final boolean[] set = new boolean[n];
  while (--n >= 0) {
    set[n] = (b & 0x80) != 0;
    b <<= 1;
  }
  return set;
}

または、同等に、

static boolean[] bits(final byte b) {
  return new boolean[] {
    (b &    1) != 0,
    (b &    2) != 0,
    (b &    4) != 0,
    (b &    8) != 0,
    (b & 0x10) != 0,
    (b & 0x20) != 0,
    (b & 0x40) != 0,
    (b & 0x80) != 0
  };
}
于 2012-08-05T22:21:32.330 に答える
5

Java 7にはBitSet.valueOf(long [])とBitSet.toLongArray()があります

int n = 12345;
BitSet bs = BitSet.valueOf(new long[]{n});
于 2014-03-25T18:11:24.357 に答える
1

あなたができること:

char[] bits = Integer.toBinaryString(num).toCharArray();基になるビット文字列をchar[]

例えば

public BitSet getBitSet(int num){
    char[] bits = Integer.toBinaryString(num).toCharArray();  
    BitSet bitSet = new BitSet(bits.length);  
    for(int i = 0; i < bits.length; i++){  
        if(bits[i] == '1'){
            bitSet.set(i, true);
        }
        else{
            bitSet.set(i, false);
        }                
    }
    return bitSet;
}  

boolean []この方法でも配列を作成できます。

于 2012-08-05T22:07:34.253 に答える
0

このスレッドは、AndroidBitSet.valueOf()がAPI 19で追加したために発生しました。受け入れられた回答のoldrinbの2番目のスニペットを使用しましたが、エラーがあったため、変更する必要がありました。さらに、BitSetを返すように変更しましたが、boolean[]に変更しても問題はありません。彼の返事に対する私のコメントを見てください。

これは、現在正常に実行されている変更です。

public static BitSet toBitSet(byte b) {
    int n = 8;
    final BitSet set = new BitSet(n);
    while (n-- > 0) {
        boolean isSet = (b & 0x80) != 0;
        set.set(n, isSet);
        b <<= 1;
    }
    return set;
}
于 2015-11-03T13:14:26.933 に答える
0

ストリーム(J8 +)を使用するための演習:

// J7+
BitSet bitSet(final long... nums) {
    return BitSet.valueOf(nums);
}

// J8+
final IntStream bitsSet = bitSet(num).stream();

// vice-versa
BitSet bitSet(final IntStream bitsSet) {
    return bitsSet.collect(BitSet::new, BitSet::set, BitSet::or);
}

// without BitSet
IntStream bitsSet(final long... nums) {
    return IntStream.range(0, nums.length)
            .flatMap(n -> IntStream.range(0, Long.SIZE - 1)
                    .filter(i -> 0 != (nums[n] & 1L << i))
                    .map(i -> i + n * Long.SIZE));
}
于 2016-07-04T12:31:51.750 に答える