将十进制数转换为十六进制数

时间:2014-11-28 01:49:03

标签: c hex rgb

我需要一个函数rbg()来将十进制指定的颜色转换为十六进制。

颜色长2byte,编码为5:6:5。

我已经开发了一个dec_to_hex函数:

void decimal_hex(int n, char hex[]) /* Function to convert decimal to hexadecimal. */
{
        int i=0,rem;
        while (n!=0)
        {
                rem=n%16;
                switch(rem)
                {
                case 10:
                        hex[i]='A';
                        break;
                case 11:
                        hex[i]='B';
                        break;
                case 12:
                        hex[i]='C';
                        break;
                case 13:
                        hex[i]='D';
                        break;
                case 14:
                        hex[i]='E';
                        break;
                case 15:
                        hex[i]='F';
                        break;
                default:
                        hex[i]=rem+'0';
                        break;
                }
                ++i;
                n/=16;
        }
        hex[i]='\0';
        strrev(hex);   /* Reverse string */
}

但是现在我需要将这三个值合并为R G AND B

我需要像

这样的东西
int rbg (int r, int g, int b){}

但我无法弄清楚如何合并3次转换。

提前致谢

此致


string ConvertRGBtoHex(int r, int g, int B) {
    int rgbNum = ((r & 0xff) << 16)
                | ((g & 0xff) << 8)
                | (b & 0xff);

    return ConvertRGBtoHex(rgbNum);
}

我认为这可能会有效,但我遇到了问题而我的编译器无法识别字符串。

  在'convertRBGtoHex

之前预期'=',',',';','asm'或' atritbute '

到底是什么?

1 个答案:

答案 0 :(得分:0)

使用原始功能作为指导,这应该有效:

void ConvertRGBtoHex (int r, int g, int b, char* out) {
    uint16_t rgbNum = ((r & 0x1f) << 11) |
                      ((g & 0x3f) << 5)  |
                       (b & 0x1f);

    decimal_hex (rgbNum, out);
}

因此白色像素为:

char str [5];
str [4] = '\0';

ConvertRGBtoHex (31, 63, 31, str);

printf ("Color: %s\n", str);

输出:

"Color: FFFF"