Распаковка может быть выполнена с помощью:
color[0] = (colour >> 16) & 0xff; // red
color[1] = (colour >> 8) & 0xff; // green
color[2] = colour & 0xff; // blue
Обратите внимание, что вы также можете использовать структуру для прямой распаковки, если вы знаете, что машина, на которой вы работаете, например,
int main()
{
char red = 25;
char green = 57;
char blue = 23;
unsigned int colour = (255<<24) + (int(red)<<16) + (int(green)<<8) + int(blue);
struct s_rgb
{
unsigned int b:8;
unsigned int g:8;
unsigned int r:8;
unsigned int alpha:8;
};
s_rgb rgb = *(s_rgb*)&colour;
cout <<std::dec<< "r:"<< (int)rgb.r << " g:"<< (int)rgb.g << " b:"<< (int)rgb.b << endl;
}