我想写一个函数getColor(),它允许我提取输入为long的十六进制数字的部分
详情如下:
//prototype and declarations
enum Color { Red, Blue, Green };
int getColor(const long hexvalue, enum Color);
//definition (pseudocode)
int getColor(const long hexvalue, enum Color)
{
switch (Color)
{
case Red:
; //return the LEFTmost value (i.e. return int value of xAB if input was 'xABCDEF')
break;
case Green:
; //return the 'middle' value (i.e. return int value of xCD if input was 'xABCDEF')
break;
default: //assume Blue
; //return the RIGHTmost value (i.e. return int value of xEF if input was 'xABCDEF')
break;
}
}
我'有点笨拙'不像过去那样。我很感激你的帮助。
[编辑] 我改变了switch语句中颜色常量的顺序 - 毫无疑问,任何设计师,CSS爱好者都会注意到颜色被定义为(在RGB比例中)为RGB;)
答案 0 :(得分:13)
一般而言:
所以,例如:
case Red:
return (hexvalue >> 16) & 0xff;
case Green:
return (hexvalue >> 8) & 0xff;
default: //assume Blue
return hexvalue & 0xff;
操作的顺序有助于减少掩码所需的文字常量的大小,这通常会导致更小的代码。
我接受了DNNX的评论,并改变了组件的名称,因为订单通常是RGB(而不是RBG)。
此外,请注意,当您对整数类型进行操作时,这些操作与“十六进制”数无关。十六进制是一种符号,一种以文本形式表示数字的方式。数字本身不是以十六进制格式存储的,它与计算机中的其他内容一样是二进制文件。
答案 1 :(得分:0)
switch (Color)
{
case Red:
return (hexvalue >> 16) & 0xff;
case Blue:
return (hexvalue >> 8) & 0xff;
default: //assume Green
return hexvalue & 0xff;
}