将双精度rgba颜色值转换为十六进制字符

3

我有一个包含rgba颜色值的浮点数数组,类似于这样:

double* colorVals = new double[4];
colorVals[0] = 0; 
colorVals[1] = 129;
colorVals[2] = 255;
colorVals[3] = .4;

我希望将其转换为十六进制字符串,其中包含类似于“#0081FF”的内容。

如何进行此转换?

2个回答

2

如果您知道值在范围内,可以使用以下代码:

#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);
}

这很好用!但是,透明度值也应该被编码吗? - Adri C.S.
CSS3规范指出:“与RGB值不同,RGBA值没有十六进制表示法。”而问题中的示例只有6个数字。所以我认为这是可以的。 - Roland Illig

0

你需要将每个双精度数转换为两个字符的十六进制,然后将它们连接成一个字符串。 注意:查看this以了解如何将双精度数转换为十六进制。


那个链接是误导性的。颜色的十六进制表示法代表RGB(A)整数值,而不是double类型的原始字节值。 - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接