//解決策: ビット単位の演算子を使用し、sstream を完全に削除します。atoi は 16 進数を適切に受け入れません。//
namespace color_tools{
std::stringstream sstream;
}
int RGB_256_to_hex(signed short r, signed short g, signed short b){
std::string hex_col;
color_tools::sstream << std::hex << r << g << b;
hex_col = color_tools::sstream.str();
color_tools::sstream.str("");
color_tools::sstream.clear();
return atoi(hex_col.c_str());
}
たとえば、(0,0,255) を渡すと、関数は 0 を返します。青色は 0000ff であるため、これは正しくありません。関数の戻り値の型を文字列に変更して hex_col を返すと、適切な結果が得られます。問題はatoi()にあるに違いないと思いますか?
少し話が逸れましたが、signed short コンポーネントを __int8 型に置き換えることはできますか? これは 256 色のステップに完全に適合するためです。
その他の提案もいただければ幸いです。