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数字矢量表达?

以上是关于C++如何将使用16进制表达的色彩RGB字符串转化为整型或者浮点型表达?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中如何将10进制的浮点数转化为16进制数

c# winform 如何实现16进制颜色值的转换

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

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

c++ 如何将string类型的二进制转换为16进制?

c语言如何实现将一张RGB的图片转化为YUV