2011-01-21 17 views

risposta

7

Dai un'occhiata alla classe BitArray.

Ecco un esempio che spiega cosa sta succedendo quando si utilizza una matrice di byte:

byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 }; 
BitArray myBA3 = new BitArray(myBytes); 

Console.WriteLine("myBA3"); 
Console.WriteLine(" Count: {0}", myBA3.Count); 
Console.WriteLine(" Length: {0}", myBA3.Length); 
Console.WriteLine(" Values:"); 
PrintValues(myBA3, 8); 

public static void PrintValues(IEnumerable myList, int myWidth) 
{ 
    int i = myWidth; 
    foreach (Object obj in myList) 
    { 
     if (i <= 0) 
     { 
     i = myWidth; 
     Console.WriteLine(); 
     } 
     i--; 
     Console.Write("{0,8}", obj); 
    } 
    Console.WriteLine(); 
} 

Questo codice produce l'uscita seguente.

myBA3 
    Count: 40 
    Length: 40 
    Values: 
    Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 
    True False False False False False False False 
    Bit8 Bit9 Bit10 Bit11 Bit12 Bit13 Bit14 Bit15 ... and so on 
    False True False False False False False False 
    True True False False False False False False 
    False False True False False False False False 
    True False True False False False False False 
+0

Sì, ho provato ad usarlo ma sembra cupola alcune cose funky internamente, come sta invertendo l'endianess o qualcosa del genere ... – Anon

+0

@Anon - È possibile inviare un altro problema con i tuoi problemi utilizzando la classe BitArray incluso test corrente e risultati inaspettati. – SwDevMan81

+0

@Anon: Penso che 'BitArray' usi internamente una matrice' int [] ', ma non sono sicuro di come si possa sapere, o si preoccupi, quale endianness utilizza. Sicuramente da un punto di vista semantico è solo una serie di 'bool'. – LukeH