为什么我的 RGB 转十六进制函数在传递颜色分量时返回 0

Why Does My RGB To Hex Function Return 0 When Passing Color Components?

本文关键字:颜色 分量 返回 RGB 我的 十六进制 函数 为什么      更新时间:2023-10-16

//SOLUTION:使用按位运算符并完全删除流。 Atoi 不能正确接受十六进制。

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()?

有点跑题了:我可以用 __int8 类型替换带符号的短组件吗,因为它完全适合 256 种颜色步骤?

项建议也将不胜感激。

是的,atoi是问题所在。它假定您传递了一个十进制作为其参数,而您已经传递了一个十六进制。它读取数字直到第一个非数字(在您的情况下为四个零)并返回结果。

我认为您最好避免通过流进行这种复杂的转换,并使用简单的按位运算,如移位和 OR,这将显着提高代码的可读性、性能和简单性。