Ah è vero sono rappresentati come char ... mmm ... allora potresti fare una cosa tipo:

codice:
struct byte
{
	unsigned char a: 1;
	unsigned char b: 1;
	unsigned char c: 1;
	unsigned char d: 1;
	unsigned char e: 1;
	unsigned char f: 1;
	unsigned char g: 1;
	unsigned char h: 1;
};

int getbit(byte &a, unsigned int i)
{
	if (i>=8) return false;
	switch (i)
	{
		case 0: return a.a;
		case 1: return a.b;
		case 2: return a.c;
		case 3: return a.d;
		case 4: return a.e;
		case 5: return a.f;
		case 6: return a.g;
		case 7: return a.h;
	}
	return false;
}
void setbit(byte &a, unsigned int i, unsigned int u)
{
	if ((u!=0 && u!=1) || i>=8) return;
	switch (i)
	{
		case 0: a.a = u; break;
		case 1: a.b = u; break;
		case 2: a.c = u; break;
		case 3: a.d = u; break;
		case 4: a.e = u; break;
		case 5: a.f = u; break;
		case 6: a.g = u; break;
		case 7: a.h = u; break;
	}
}
Non mi viene in mente altro ...