Как мне перейти на преобразование bytearray в бит-массив?
Преобразовать байт-массив в бит-массив?
Ответ 1
Очевидный путь; используя конструктор, который принимает байтовый массив:
BitArray bits = new BitArray(arrayOfBytes);
Ответ 2
Это зависит от того, что вы подразумеваете под "бит-массивом"... Если вы имеете в виду экземпляр класса BitArray
, ответ Guffa должен работать нормально.
Если вам действительно нужен массив бит, например, в форме bool[]
, вы можете сделать что-то вроде этого:
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;
}
}
Ответ 3
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;
}
Ответ 4
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();
}
Ответ 5
Вы можете использовать BitArray
для создания потока бит из массива byte
. Вот пример:
string testMessage = "This is a test message";
byte[] messageBytes = Encoding.ASCII.GetBytes(testMessage);
BitArray messageBits = new BitArray(messageBytes);