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字符串转化为整型或者浮点型表达?(颜色转换色彩转换)的主要内容,如果未能解决你的问题,请参考以下文章

颜色模式中8位,16位,24位,32位色彩是啥意思

0x000000 16进制颜色代码第一个0表示啥意思,为啥要0x后面的颜色代码呢?

如何在 C++ 中将 RGB 颜色值转换为十六进制值?

js中如何把RGB颜色转换为16进制颜色

js 颜色16进制转RGB方法

详解RGB-HSB互相转换的算法