首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >十六进制颜色代码到RGB数字

十六进制颜色代码到RGB数字
EN

Stack Overflow用户
提问于 2016-02-05 09:47:07
回答 2查看 87关注 0票数 0

我想不出该怎么做。我有一个包含颜色名称或十六进制代码(#ffffff)的字符数组,它没有向main返回正确的RGB值,也没有通过"#“来读取6个十六进制数字。我真的很生疏,大约一年没有编码了,所以请批评你看到的任何东西。

代码语言:javascript
复制
/**readColor()
Converts the decimal values, color name or hex value read from
the input stream to the 3 byte RGB field

Returns the rgb values if successful.  On error prints errmsg and
exits.
**/
color_t readColor(FILE *infile, char *errmsg) 
{
int rc, red, green, blue;
char alpha[7] = {};
int i=0;

rc = fscanf(infile, "%d %d %d\n", &red, &green, &blue);
if(rc == 3){
    if(red>=0 && red<=255 && green>=0 && green<=255 && blue>=0 && blue<=255){
        return((color_t){red, green, blue});
    }

}
if (rc != 0){
    printf("%s", errmsg);
    return((color_t){0,0,0});
}


fgets(alpha, 10, infile);
fputs(alpha);

i=0;
if(strcmp(alpha, "white")==0){
    return((color_t){255, 255, 255 });
}
else if(strcmp(alpha, "red")==0){
    return((color_t){255, 0, 0});
}
else if(strcmp(alpha, "blue")==0){
    return((color_t){0, 0, 255});
}
else if(strcmp(alpha, "purple")==0){
    return((color_t){128, 0, 255});
}
else if(strcmp(alpha, "black")==0){
    return((color_t){0, 0, 0});
}
else if(strcmp(alpha, "green")==0){
    return((color_t){0, 255, 0});
}
else if(strcmp(alpha, "orange")==0){
    return((color_t){255, 128, 0});
}
else if(strcmp(alpha, "yellow")==0){
    return((color_t){255, 255, 0});
}
else if(alpha[0] == "#"){
    alpha++;
    if(sscanf(alpha, "%2x%2x%2x", &red, &green, &blue)!= 3){
        printf("%s", errmsg);
    }
    else{
        return((color_t){red, green, blue});
    }
}
else{
    printf("%s", errmsg);
}

return((color_t){0, 0, 0});
}
EN

回答 2

Stack Overflow用户

发布于 2016-02-05 09:55:00

可以使用%x格式说明符读取十六进制值。在0填充宽度为2的情况下,将不需要范围测试。例如:

代码语言:javascript
复制
int r, g, b;
if( 3 == scanf( "#%02x%02x%02x", &r, &g, &b ) )
{
    printf( "Red   : %3d (%02x)\n", r, r );
    printf( "Green : %3d (%02x)\n", g, g );
    printf( "Blue  : %3d (%02x)\n", b, b );
}
票数 1
EN

Stack Overflow用户

发布于 2016-02-05 09:51:46

代码语言:javascript
复制
alpha[0] == "#"
            ^ ^
            double quotes for string literal

应该是

代码语言:javascript
复制
alpha[0] == '#'
            ^ ^
            single quotes for character literal

将单个字符与字符串文字进行比较是违反约束的(感谢@AnT指出术语错误),编译器不应该允许这样做。而是将单个字符与字符文字进行比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35214984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档