将十六进制值从字符串转换为十六进制颜色代码

时间:2011-09-17 14:16:27

标签: objective-c cocoa macros plist uicolor

在Objective-C xcode项目中,我有一个plist文件,用于将整数与十六进制代码相关联。动态地我想从plist文件中使用这个颜色代码并将该十六进制值传递给下面的宏来获取UIColor对象。

宏:

#define UIColorFromRGB(rgbValue) [UIColor \
 colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

我需要传递给此宏的实际十六进制值是0xF2A80C,但它存在于plist文件中。我可以把它作为一个字符串。在这种情况下我该怎么办?

提前致谢。

您想了解有关此事的任何细节吗?。

3 个答案:

答案 0 :(得分:8)

NSScanner *scanner = [NSScanner scannerWithString:hexString];
unsigned hex;
BOOL success = [scanner scanHexInt:&hex];
UIColor *color = UIColorFromRGB(hex);

答案 1 :(得分:0)

这个怎么样:

NSString *textValue = @"0xF2A80C";
long long value = [textValue longLongValue];
UIColor *color = UIColorFromRGB(value);

我没有测试过它。如果有问题,请报告我。

答案 2 :(得分:0)

您可以使用旧的C函数strtol,以16为基础。

const char* cString = [myStr cStringUsingEncoding:[NSString defaultCStringEncoding]];
int hexValue = (int)strtol(cString, NULL, 16);
UIColor *color = UIColorFromRGB(hexValue);