5
¿Hay una clase incorporada o algo en .NET que me permita tratar una matriz de bytes como un campo de bits grande?byte-array como bitfield en C#?
¿Hay una clase incorporada o algo en .NET que me permita tratar una matriz de bytes como un campo de bits grande?byte-array como bitfield en C#?
Echa un vistazo a la clase BitArray.
Aquí es un ejemplo para explicar lo que está pasando cuando se utiliza una matriz de bytes:
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();
}
Este código genera la siguiente salida.
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í, he tratado de usarlo, pero parece que algunas cosas cúpula cobarde internamente, como que está invirtiendo el endianess o algo ... – Anon
@Anon - Puede publicar otra pregunta con sus problemas utilizando la clase BitArray incluida la prueba actual y los resultados inesperados. – SwDevMan81
@Anon: Creo que 'BitArray' usa una matriz' int [] 'internamente, pero no estoy seguro de cómo sabría, o le importaría, qué endianness usa. Seguramente desde un punto de vista semántico, es solo una serie de 'bool'. – LukeH