[MFC] 10進RGB値を16進RGB値に変換

RGB値を3つのint型変数で持っている時、このRGB値を16進表記にし、1つの文字列として表したい場合に何かいい方法って無いものでしょうか?
この手のものはよく使いそうなのでライブラリにありそうですが、探し方が悪かったのか見つけられませんでした。で、10進RGB値を受け取って16進RGB値の文字列を返す関数を作ってみた。

処理系はVisual C++ 2005 (VC8.0)です。

struct RGB{
 int red;
 int green;
 int blue;
};

CString convToHexRGB( RGB* rgb ){

 // 入力値チェック
 if( red >= 0 && red <= 255 && green >= 0 && green <= 255 &&
  blue >= 0 && blue <= 255 ){
   return CString::Format( "#%02X%02X%02X", rgb->red, rgb->green, rgb->blue );
 }

 // 入力値が不正な場合
 return "";
}

実際はRGBのそれぞれの値はunsigned char型で格納すれば0~255までの値しか入らないので入力値チェックも必要なくなるのだろうけど、とある制限によりint型でRGBの各値が格納されている為上記のような実装となりました。

以下はunsigned char型で実装した場合

struct RGB{
 unsigned char red;
 unsigned char green;
 unsigned char blue;
};

CString convToHexRGB( RGB* rgb ){
 return CString::Format( "#%02X%02X%02X", rgb->red, rgb->green, rgb->blue );
}

何でRGB値しか入らないのに、しかも仕様書で0~255までの値となっているにもかかわらずint型で入れなければならないんだろう…。
処理系固定なのに…。