вот тебе решение в лоб, сиди копируй биты по одному в цикле, захочешь оптимальное решение, напишешь сам :)
int getbit(unsigned char *src, int adr)
{
int pos = adr / 8;
int bit = adr % 8;
unsigned char mask = 1U<<bit;
return( (src[pos] & mask) !=0 );
}
void setbit(unsigned char *dst, int adr, int val)
{
int pos = adr / 8;
int bit = adr % 8;
unsigned char pmask = 1U<<bit;
unsigned char nmask = ~pmask;
if(val){ dst[pos] |= pmask; }
else{ dst[pos] &= nmask; }
}