私は次のものを持っています:
int num=Integer.parseInt(lineArray[0]);
byte numBit= num & 0xFF;
numBit
ビット配列に変換する非常に簡単な方法はありますか?またはさらに良いことに、intのバイト変換をバイパスnum
してビット配列に直接移行する方法はありますか?
ありがとう
私は次のものを持っています:
int num=Integer.parseInt(lineArray[0]);
byte numBit= num & 0xFF;
numBit
ビット配列に変換する非常に簡単な方法はありますか?またはさらに良いことに、intのバイト変換をバイパスnum
してビット配列に直接移行する方法はありますか?
ありがとう
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
};
}
Java 7にはBitSet.valueOf(long [])とBitSet.toLongArray()があります
int n = 12345;
BitSet bs = BitSet.valueOf(new long[]{n});
あなたができること:
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 []
この方法でも配列を作成できます。
このスレッドは、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;
}
ストリーム(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));
}