I've made this simple function for reading N bits from an unsigned char*  (with a possible offset) and I'm willing to share it here, get a review, suggestions for improving it, etc...typedef struct bits_t {    unsigned char *data;    unsigned int len;} bits_t;bits_t *read_bits(unsigned char *src, int bits_offset, int nbits){    unsigned int curr_bit, curr_byte, remaining_to_read, bit_position_in_byte;    curr_bit = curr_byte = 0;    remaining_to_read = nbits;    bits_t *bits = malloc(sizeof(bits_t));    bits->len = nbits;    bits->data = calloc(1, bits->len);    for(curr_bit = 1; curr_bit <= nbits; curr_bit++){        if(curr_bit >= bits_offset && remaining_to_read){            curr_byte = (curr_bit - 1) / 8;            bit_position_in_byte = (curr_bit - 1) - (curr_byte * 8);            bits->data[remaining_to_read - 1] = read_bit(src[curr_byte], bit_position_in_byte);            remaining_to_read--;        }    }    return bits;}Main:unsigned char *x = oo;bits_t *bits = read_bits(x, 0, 16);for(i = 0; i < bits->len; i++){    printf(%d, bits->data[i]);}Result: 0110111101101111
Function for reading bits
c;bitwise