//解决方案:使用按位运算符并完全删除sstream。 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是问题所在。假定您已传递十进制作为参数,而已传递十六进制。它读取数字直到第一个非数字(在您的情况下为四个零),然后返回结果。

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

09-11 19:27