Przekonwertować tablicę bajtów na tablicę bitów?
Oczywisty sposób; używając konstruktora, który pobiera tablicę bajtów:
BitArray bits = new BitArray(arrayOfBytes);
To zależy od tego, co rozumiesz przez "tablicę bitów"... Jeśli masz na myśli instancję BitArray
klasie, odpowiedź Guffy powinna działać dobrze.
Jeśli rzeczywiście potrzebujesz tablicy bitów, w postaci bool[]
na przykład możesz zrobić coś takiego:
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;
}
}
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;
}