im zweifelsfall mit pointer

Code:
void Color16bit2RGB(uint16_t color16, uint8_t* R, uint8_t* G, uint8_t* B) {

   *R = (uint8_t)((0b1111100000000000 & color16) >> 11);
   *G = (uint8_t)((0b0000011111100000 & color16) >> 5);
   *B = (uint8_t)((0b0000000000011111 & color16));
}
muss gestehen dass ich solche reference calls meide, weils mir leicht spanisch ist
pointer sind für mich persönlich einfacher zu handhaben

beim aufruf musst du dann natürlich dioe adressen auflösen

Code:
uint8_t myR,myG,myB;
Color16bit2RGB(some16bitColor, &myR, &myG, &myB);
printf("<font color=\"#%00h%00h%00h\">",myR,myG,myB);

PS: ich habe die einzelnen farben mal auf 8 bit reduziert und einen expliziten cast mit eingebaut damit alles sauber aussieht