For example, I have byte = 245. I want to get any amount of subbits from it and convert it to integer. How I can do this?
For example, I need values from 2 to 5 bits or from 0 to 2, 5 to 7.
Any solution on C based language is fine.
Currently I use this function to get single bits:
public bool GetBitFromByte(byte b, byte bit_index_0_7)
var bit = (b & (1 << bit_index_0_7)) != 0;
public static byte GetBytesFromBits(bool bits)
int bits_amount = bits.Length;
while (bits_amount % 8 > 0)
byte vals = new byte[bits_amount / 8];
for (int i = 0; i < bits.Length; i += 8)
byte val = 0;
for (int j = i; j < i + 8 && j < bits.Length; j++)
val <<= 1;
if (bits[j]) val |= 1;
vals[i / 8] = val;
This is called masking. You specify the bits as powers of two (e.g. in C++,
1<<i for bit
i), sum these to form the mask, then use
& on the original value and the mask.