Iphone Objective-C中的十六进制值

Iphone Objective-C中的十六进制值,iphone,objective-c,ios,uicolor,Iphone,Objective C,Ios,Uicolor,我想从十六进制值创建UIColor。但我的颜色是一串。因此,我实施了这个解决方案: 代码: 然后我(简化): 因此,当我想调用宏时: UIColor *myColor = UIColorFromRGB(myString); 我收到一个错误:二进制表达式('NSString*'和'int')的操作数无效。 我知道我必须传递int,但在这种情况下如何将NSString转换为int?当然[myString intValue]在这里不起作用。您不能按标准操作,但请查看my,它有一种方法可以执行此操作

我想从十六进制值创建UIColor。但我的颜色是一串。因此,我实施了这个解决方案:

代码:

然后我(简化):

因此,当我想调用宏时:

UIColor *myColor = UIColorFromRGB(myString);
我收到一个错误:
二进制表达式('NSString*'和'int')的操作数无效。


我知道我必须传递int,但在这种情况下如何将NSString转换为int?当然
[myString intValue]在这里不起作用。

您不能按标准操作,但请查看my,它有一种方法可以执行此操作


您定义的宏预期为RGB格式的整数。您正在传入一个字符串,这就是它不起作用的原因。

您可以将宏直接用于十六进制整数,如下所示:

UIColorFromRGB(0xff4433)
unsigned colorInt = 0;
[[NSScanner scannerWithString:hexString] scanHexInt:&colorInt];
UIColorFromRGB(colorInt)
或者您可以将十六进制字符串解析为如下所示的整数:

UIColorFromRGB(0xff4433)
unsigned colorInt = 0;
[[NSScanner scannerWithString:hexString] scanHexInt:&colorInt];
UIColorFromRGB(colorInt)

顺便说一下,您在复制的代码的屏蔽值中出错。绿色应该是(RGB值&0x00FF00),而不是(RGB值&0xFF00),蓝色应该是(RGB值&0x0000FF),而不是(RGB值&0xFF)。我复制了你的代码,花了很长时间才解决了这个问题。无论如何,我从道格·加兰特那里学到了很多关于逐位移位和加法的知识