【发布时间】:2013-12-03 12:09:26
【问题描述】:
我有一个带有 rgba 颜色值的双精度数组。像这样:
double* colorVals = new double[4];
colorVals[0] = 0;
colorVals[1] = 129;
colorVals[2] = 255;
colorVals[3] = .4;
我想将其转换为包含以下内容的十六进制字符串:“#0081FF”
我将如何进行这种转换?
【问题讨论】:
我有一个带有 rgba 颜色值的双精度数组。像这样:
double* colorVals = new double[4];
colorVals[0] = 0;
colorVals[1] = 129;
colorVals[2] = 255;
colorVals[3] = .4;
我想将其转换为包含以下内容的十六进制字符串:“#0081FF”
我将如何进行这种转换?
【问题讨论】:
如果您知道值在范围内,则可以使用以下代码:
#include <string>
#include <cstring>
std::string rgbstr(const double *rgb) {
char tmp[8];
std::snprintf(tmp, sizeof(tmp), "#%02x%02x%02x", int(rgb[0]), int(rgb[1]), int(rgb[2]));
return std::string(tmp);
}
【讨论】:
您必须将每个双精度转换为两个字符的十六进制,然后将它们全部连接成一个字符串 注意:请参阅this 了解如何将双精度转换为十六进制
【讨论】: