2 votes

Pourquoi j'utilise new BitArray(byte[]), je n'arrive pas à obtenir les bons bits.

byte[] test = new byte[] {36, 146};

BitArray ba = new BitArray(test);

for(int i = 0; i < ba.Length; i++)
  Debug.Log(ba[i]);

Je veux obtenir des bits est :

False False True False False True False False True False False True False False True False

mais le retour l'est :

False False True False False True False False False True False False True False False True

Pourquoi ?

1voto

Dmitry Bychenko Points 17719

Essayons d'autres chiffres, disons 1 y 7 et obtenons une sortie différente :

 byte[] test = new byte[] {1, 7};

 BitArray ba = new BitArray(test);

 StringBuilder sb = new StringBuilder();

 for (int i = 0; i < ba.Length; i++) {
   if (i > 0 && i % 8 == 0)
     sb.Append(' ');

   sb.Append(ba[i] ? '1' : '0');
 }

 Console.Write(sb.ToString());

Résultat :

 10000000 11100000

Tu peux voir ce qui se passe ?

   1 -> 0b00000001 -> 10000000 -> True False False False False False False False
   7 -> 0b00000111 -> 11100000 -> True  True  True False False False False False

Revenons aux valeurs initiales : 36, 146

  36 -> 0b00100100 -> 00100100 -> False False  True False False  True False False
 146 -> 0b10010010 -> 01001001 -> False  True False False  True False False  True 

Quand on met 1 en binaire le 1er bit le le plus à droite : 00000001 Cependant, lorsque nous représentons le même 1 comme un tableau de bits, nous avons le premier bit le plus à gauche : [1, 0, 0, 0, 0, 0, 0, 0] == [True, False, False, False, False, False, False, False] .

Malheureusement, 36 est un binaire palindrome 00100100 Il lit de manière égale de gauche à droite et de droite à gauche, ce qui, je pense, est la cause du comportement surprenant (pourquoi les 8 premiers bits sont corrects alors que les 8 derniers ne le sont pas).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X