Ich quäle mich gerade mit einem kleinen Stück Code, das in bisher 3 verschiedenen Varianten noch nie funktioniert hat.
Ich möchte eine 24-bit-RGB-Farbe (0xRR, 0xGG, 0xBB) in eine 8-bit(6-bit)-Farbe umwandeln (00BBGGRRb).
struct RGBColor8
{
	unsigned Red   :2;
	unsigned Green :2;
	unsigned Blue    :2;
	unsigned Zero  :2;
};
struct RGBColor24
{
	BYTE Red;
	BYTE Green;
	BYTE Blue;
};
Mit dieser Funktion:
void SetPixel(WORD wX, WORD wY, const struct RGBColor24 *pstrColor)
{
	struct RGBColor8 bColor;
	BYTE *pbColor;
	bColor.Red = pstrColor->Red / 64;
	bColor.Green = pstrColor->Green / 64;
	bColor.Blue = pstrColor->Blue / 64;
	bColor.Zero = 0;
	pbColor = &bColor;
	pbVGAMemory[wY*320 + wX] = *pbColor;
	return;
}
Was ist da falsch? Ich habe es auch schon ohne Bitfelder benutzt, einfach mit Shifts und ANDs und ORs und ADDs, aber nie hat's geklappt. Die 8-bit Farbe hat nie mit der 24-bit übereingestimmt.