如何在 C++ 中使用正则表达式将十六进制颜色字符串转换为 RGB
How to convert hex color string to RGB using regex in C++
如何使用正则表达式将十六进制颜色字符串转换为 RGB?
我正在使用正则表达式,但它不起作用。我不熟悉正则表达式。方法正确吗?
下面是示例代码:
int main()
{
std::string l_strHexValue = "#FF0000";
std::regex pattern("#?([0-9a-fA-F]{2}){3}");
std::smatch match;
if (std::regex_match(l_strHexValue, match, pattern))
{
auto r = (uint8_t)std::stoi(match[1].str(), nullptr, 16);
auto g = (uint8_t)std::stoi(match[2].str(), nullptr, 16);
auto b = (uint8_t)std::stoi(match[3].str(), nullptr, 16);
}
return 0;
}
你可以使用
std::regex pattern("#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})");
此处,FF
、00
和 00
被捕获到一个单独的组中。
或者,您可以使用稍微不同的方法。
std::string l_strHexValue = "#FF0000";
std::regex pattern("#([0-9a-fA-F]{6})");
std::smatch match;
if (std::regex_match(l_strHexValue, match, pattern))
{
int r, g, b;
sscanf(match.str(1).c_str(), "%2x%2x%2x", &r, &g, &b);
std::cout << "R: " << r << ", G: " << g << ", B: " << b << "\n";
}
// => R: 255, G: 0, B: 0
参见C++ demo。
如何使用正则表达式将十六进制颜色字符串转换为 RGB?
我正在使用正则表达式,但它不起作用。我不熟悉正则表达式。方法正确吗?
下面是示例代码:
int main()
{
std::string l_strHexValue = "#FF0000";
std::regex pattern("#?([0-9a-fA-F]{2}){3}");
std::smatch match;
if (std::regex_match(l_strHexValue, match, pattern))
{
auto r = (uint8_t)std::stoi(match[1].str(), nullptr, 16);
auto g = (uint8_t)std::stoi(match[2].str(), nullptr, 16);
auto b = (uint8_t)std::stoi(match[3].str(), nullptr, 16);
}
return 0;
}
你可以使用
std::regex pattern("#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})");
此处,FF
、00
和 00
被捕获到一个单独的组中。
或者,您可以使用稍微不同的方法。
std::string l_strHexValue = "#FF0000";
std::regex pattern("#([0-9a-fA-F]{6})");
std::smatch match;
if (std::regex_match(l_strHexValue, match, pattern))
{
int r, g, b;
sscanf(match.str(1).c_str(), "%2x%2x%2x", &r, &g, &b);
std::cout << "R: " << r << ", G: " << g << ", B: " << b << "\n";
}
// => R: 255, G: 0, B: 0
参见C++ demo。