Собственно, сабж. Если нужно перевести значение цвета, хранящееся в 4 байтах, в строку для представления цвета в формате HTML, то вот навскидку 2 способа (я сознательно не использовал многие зависящие от конкретных библиотек (MFC, VCL и пр.) функции типа IntToHex):
Сами функции (доработать по вкусу
):
//---------------------------------------------------------------------------
void print_html_color1(long color) {
printf("#%02X%02X%02X",(BYTE)color, (BYTE) (((WORD)color) >> 8) ,(BYTE)(color >> 16) );
}
//---------------------------------------------------------------------------
void print_html_color2(long color) {
static char hexVals[]={ // hex-таблица
'0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F'
};
char cResultColor[8]={0}; // результирующее представление цвета в формате HTML
cResultColor[0] = '#';
BYTE* pByte = (BYTE*) &color;
for(int i=0;i<3;i++) {
cResultColor[i*2+1] = hexVals[ (*pByte)/16 ];
cResultColor[i*2+2] = hexVals[ (*pByte++)%16 ];
}
printf(cResultColor);
}
//---------------------------------------------------------------------------
Тестовая программка:
//---------------------------------------------------------------------------
int main(int argc, char **argv)
{
long sampleColorInRGB = RGB(0,125,255);
print_html_color1(sampleColorInRGB);
printf("\n");
print_html_color2(sampleColorInRGB);
getch();
return 0;
}
//---------------------------------------------------------------------------
Ну и, как обычно, все это дело компилировалось и тестировалось под BCB 1.0. Если будут замечания, предложения — сюда.
З.Ы. Про "доработать по вкусу" я не зря — как и обычно, "легким движением брюки превращаются... брюки превращаются..."
З.З.Ы. Если вдруг у кого трудности с подключением определения макроса RGB ( разве еще есть такие? ) , то вот и он:
#define RGB(r, g ,b) ((DWORD) (((BYTE) (r) | \
((WORD) (g) << 8)) | \
(((DWORD) (BYTE) (b)) << 16)))