5
Esiste una classe integrata o qualcosa in .NET che consenta di trattare un array di byte come un grande campo di bit?byte-array come bitfield in C#?
Esiste una classe integrata o qualcosa in .NET che consenta di trattare un array di byte come un grande campo di bit?byte-array come bitfield in C#?
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
Sì, ho provato ad usarlo ma sembra cupola alcune cose funky internamente, come sta invertendo l'endianess o qualcosa del genere ... – Anon
@Anon - È possibile inviare un altro problema con i tuoi problemi utilizzando la classe BitArray incluso test corrente e risultati inaspettati. – SwDevMan81
@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