C++如何将使用16进制表达的颜色色彩RGB字符串转化为整型或者浮点型表达?(颜色转换色彩转换)
Posted Dontla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++如何将使用16进制表达的颜色色彩RGB字符串转化为整型或者浮点型表达?(颜色转换色彩转换)相关的知识,希望对你有一定的参考价值。
#pragma warning(disable : 4996)
#include <iostream>
using namespace std;
//网上扒来的高效率实现
long hextonum(string str)
char in[1024] = 0 ;
strcpy(in, str.c_str());
// 用指针循环字符串
char* pin = in;
// 以累加方式获得输出结果
long out = 0;
while (*pin != 0)
// 针对每一个输入字符,依次移位out到高一级(4位对应一个bit)
out <<= 4;
// 对这个字符进行位运算,并且结果加到out变量的低位上。
out += (*pin < 'A') ? *pin & 0xF : (*pin & 0x7) + 9;
pin++;
return out;
int main()
string s = "00FFFF";
//hextonum函数将字符串转化为整型类型
long num = hextonum(s);
//16进制色彩表示中,两个数字一个完整的色彩部件(red,green,blue)
//2进位存储表达中,8个字节位表达一个16进制整数
//移位16个字节位,并执行&操作,可以得出red部件的数值
int red = num >> 16 & 0xFF;
//移位8个字节位,并执行&操作,可以得出green部件的数值
int green = num >> 8 & 0xFF;
//低位8个字节执行&操作,可以得出blue部件的数值
int blue = num & 0xFF;
//如果要得出每个部件数值的浮点表达,执行除法即可
float redFloat = red/(255.0);
printf("%s --> R:%d G:%d B:%d\\n", s.c_str(), red, green, blue);
return 0;
运行结果:
00FFFF --> R:0 G:255 B:255
参考文章:C++中如何将16进制字符串(hex string)转化为rgb数字矢量表达?
20221031 改成方便调用的接口
#pragma warning(disable : 4996)
#include <iostream>
using namespace std;
bool colorHexToNum(string str, int& R, int& G, int& B)
char in[1024] = 0 ;
strcpy(in, str.c_str());
char* pin = in;
long out = 0;
while (*pin != 0)
out <<= 4;
out += (*pin < 'A') ? *pin & 0xF : (*pin & 0x7) + 9;
pin++;
R = out >> 16 & 0xFF;
G = out >> 8 & 0xFF;
B = out & 0xFF;
return true;
int main()
bool ret;
int R;
int G;
int B;
string s = "FF00FF";
ret = colorHexToNum(s, R, G, B);
if (!ret)
cout << "colorHexToNum wrong!" << endl;
printf("%s --> R:%d G:%d B:%d\\n", s.c_str(), R, G, B);
return 0;
运行结果:
FF00FF --> R:255 G:0 B:255
程序里貌似输出全是0-255的,我加了校验貌似多余了,没有仔细测试过
以上是关于C++如何将使用16进制表达的颜色色彩RGB字符串转化为整型或者浮点型表达?(颜色转换色彩转换)的主要内容,如果未能解决你的问题,请参考以下文章