Convertir un octet ou un int en bitset

J’ai le suivant:

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

Existe-t-il un moyen très simple de convertir numBit en un tableau de bits? Ou mieux encore, existe-t-il un moyen de contourner la conversion d’octet de int et d’aller directement de num à un tableau de bits?

Merci

Si vous voulez un BitSet , essayez:

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

Si vous voulez un 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; } 

ou équivalent,

 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 a BitSet.valueOf (long []) et BitSet.toLongArray ()

 int n = 12345; BitSet bs = BitSet.valueOf(new long[]{n}); 

Vous pourriez faire:

char[] bits = Integer.toBinarySsortingng(num).toCharArray(); pour obtenir la chaîne de bits sous-jacente sous forme de caractère char[]

Par exemple

 public BitSet getBitSet(int num){ char[] bits = Integer.toBinarySsortingng(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; } 

Vous pouvez également créer un tableau boolean [] .

Je suis tombé sur ce sujet car Android a ajouté BitSet.valueOf() aussi BitSet.valueOf() que dans l’API 19. J’ai utilisé le deuxième extrait de oldrinb de la réponse acceptée mais j’ai dû le modifier car il contenait des erreurs. De plus, je l’ai modifié pour retourner un BitSet, mais cela ne devrait pas poser de problème de le changer en booléen []. Voir mon commentaire à sa réponse.

C’est la modification qui fonctionne maintenant avec succès:

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

Juste un exercice d’utilisation des stream (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)); }