Skip to main content

How to store an array of booleans in a int

Uneori ajungem sa ne dorim sa stocam intr-un int mai multe valori booleene( de obicei de dragul artei) pentru a salva a avea mesajele care se trimit pe tiava cat mai mici. O solutie pe care o propun este sa folosim BitArray.
Acesta ne permite sa lucram cu biti. Pentru a initializa si seta valoriile unui BitArray trebuie sa scriem urmatorul cod:  
BitArray bits = new BitArray(32); // 32 - numarul de biti pe care il ocupa un int 
bits[0] = true;
...
bits[31] = false; 
Urmatorul pas este sa convertim un BitArray in int. Acest lucru se face destul de usor cu metoda CopyTo:  
int[] valueConverted = new int[1];
bits.CopyTo(valueConverted,0); // 0 - reprezinta indexul de inceput 
int result = valueConverted[0]; 
In result am obtinut int-ul care contine BitArrat-ul nostru.Pentru a executa procesul invers, sa obtinem un BitArray dintr-un int este nevoie sa apelam metoda statica GetBytes a clasei BitConverter.  
BitArray bits = BitConverter.GetBytes(result); 
Ce alta solutie aveti pentru aceast task?

Comments

  1. Eh, bitarrays, flags.. :)
    Ne obisnuim lenesi si uitam de un banal
    int bits |= 1 << pos;
    ca sa "stocam" un bit
    si (bits & 1< 0
    ca sa ii aflam valoarea..

    ;)

    ReplyDelete
  2. Normal, mai sus corect era:
    int bits = 0;
    bits |= 1 << pos;
    if (bits & (1 << pos) != 0) ...

    ReplyDelete

Post a Comment