#include <stdio.h>
#include <string.h>
static unsigned char* read_bits(const unsigned char *src, int offset, int nbits){
int bit, byte, bit_position;
unsigned char *s
= calloc(1, nbits
+ 1); if(s){
--nbits;
for(bit = offset; nbits >= 0; ++bit, --nbits){
byte = bit / 8;
bit_position = bit % 8;
s[nbits] = (src[byte] >> bit_position) & 1;
}
}
return s;
}
int main(void) {
unsigned char *x = "oo";
printf("%s -> %s\n", x
, read_bits
(x
, 0, 16)); //should print "oo -> 0110111101101111" return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCnN0YXRpYyB1bnNpZ25lZCBjaGFyKiByZWFkX2JpdHMoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgb2Zmc2V0LCBpbnQgbmJpdHMpewoJaW50IGJpdCwgYnl0ZSwgYml0X3Bvc2l0aW9uOwoJdW5zaWduZWQgY2hhciAqcyA9IGNhbGxvYygxLCBuYml0cyArIDEpOwoJaWYocyl7CgkJLS1uYml0czsKCQlmb3IoYml0ID0gb2Zmc2V0OyBuYml0cyA+PSAwOyArK2JpdCwgLS1uYml0cyl7CgkJCWJ5dGUgPSBiaXQgLyA4OwoJCQliaXRfcG9zaXRpb24gPSBiaXQgJSA4OwoJCQlzW25iaXRzXSA9IChzcmNbYnl0ZV0gPj4gYml0X3Bvc2l0aW9uKSAmIDE7CgkJfQoJfQoJcmV0dXJuIHM7Cn0KCmludCBtYWluKHZvaWQpIHsKCXVuc2lnbmVkIGNoYXIgKnggPSAib28iOwoJcHJpbnRmKCIlcyAtPiAlc1xuIiwgeCwgcmVhZF9iaXRzKHgsIDAsIDE2KSk7IC8vc2hvdWxkIHByaW50ICJvbyAtPiAwMTEwMTExMTAxMTAxMTExIgoJcmV0dXJuIDA7Cn0KCgo=