type getbytes example endian convert array c# bit-manipulation

getbytes - convert type c#



Convertir Byte Array a Bit Array? (5)

Depende de lo que quieras decir con "matriz de bits" ... Si te refieres a una instancia de la clase BitArray, la respuesta de Guffa debería funcionar bien.

Si realmente desea una matriz de bits, en forma de bool[] por ejemplo, podría hacer algo como eso:

byte[] bytes = ... bool[] bits = bytes.SelectMany(GetBits).ToArray(); ... IEnumerable<bool> GetBits(byte b) { for(int i = 0; i < 8; i++) { yield return (b & 0x80) != 0; b *= 2; } }

¿Cómo haría para convertir un bytearray a una matriz de bits?


La forma obvia; usando el constructor que toma una matriz de bytes:

BitArray bits = new BitArray(arrayOfBytes);


Puede utilizar BitArray para crear un flujo de bits desde una matriz de byte . Aquí un ejemplo:

string testMessage = "This is a test message"; byte[] messageBytes = Encoding.ASCII.GetBytes(testMessage); BitArray messageBits = new BitArray(messageBytes);


public static byte[] ToByteArray(bool[] byteArray) { return = byteArray .Select( (val1, idx1) => new { Index = idx1 / 8, Val = (byte)(val1 ? Math.Pow(2, idx1 % 8) : 0) } ) .GroupBy(gb => gb.Index) .Select(val2 => (byte)val2.Sum(s => (byte)s.Val)) .ToArray(); }


public static byte[] ToByteArray(this BitArray bits) { int numBytes = bits.Count / 8; if (bits.Count % 8 != 0) numBytes++; byte[] bytes = new byte[numBytes]; int byteIndex = 0, bitIndex = 0; for (int i = 0; i < bits.Count; i++) { if (bits[i]) bytes[byteIndex] |= (byte)(1 << (7 - bitIndex)); bitIndex++; if (bitIndex == 8) { bitIndex = 0; byteIndex++; } } return bytes; }