How would I go about converting a bytearray to a bit array?
Asked
Active
Viewed 5.0k times
6 Answers
57
The obvious way; using the constructor that takes a byte array:
BitArray bits = new BitArray(arrayOfBytes);

Guffa
- 687,336
- 108
- 737
- 1,005
-
1What about to a pre-existing bit array? – Sir Oct 04 '17 at 19:04
15
It depends on what you mean by "bit array"... If you mean an instance of the BitArray
class, Guffa's answer should work fine.
If you actually want an array of bits, in the form of a bool[]
for instance, you could do something like that :
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;
}
}

Thomas Levesque
- 286,951
- 70
- 623
- 758
-
1Your answer is more appropriate than the answer above cos result contains leading zeros. +1 – Nolesh Jan 30 '13 at 05:06
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;
}

abhijtih
- 21
- 1
1
You can use BitArray
to create a stream of bits from a byte
array. Here an example:
string testMessage = "This is a test message";
byte[] messageBytes = Encoding.ASCII.GetBytes(testMessage);
BitArray messageBits = new BitArray(messageBytes);

Alejandro Montilla
- 2,626
- 3
- 31
- 35

Hendrik Vis
- 63
- 7
1
byte number = 128;
Convert.ToString(number, 2);
=> out: 10000000

Arghya Sadhu
- 41,002
- 9
- 78
- 107

Song Lam Le
- 11
- 1
-
1Could you please provide a bit more detail of what you are doing and how it is working? – darclander Sep 06 '20 at 14:28
-
From the [documentation](https://learn.microsoft.com/en-us/dotnet/api/system.convert.tostring?view=net-7.0) >ToString(Byte, Int32) Converts the value of an 8-bit unsigned integer to its equivalent string representation in a specified base. – Francesco B. Dec 15 '22 at 15:17
0
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();
}

Pierre Contri
- 11
- 2