【问题标题】:Converting hex value from string to hext color code将十六进制值从字符串转换为十六进制颜色代码
【发布时间】:2011-09-17 14:16:26
【问题描述】:

在 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 文件中。我可以把它当作一个字符串。这种情况我该怎么办?

提前致谢。

您需要有关此的任何详细信息吗?

【问题讨论】:

    标签: objective-c cocoa macros plist uicolor


    【解决方案1】:
    NSScanner *scanner = [NSScanner scannerWithString:hexString];
    unsigned hex;
    BOOL success = [scanner scanHexInt:&hex];
    UIColor *color = UIColorFromRGB(hex);
    

    【讨论】:

    • if (!success) NSLog(@"your hex string is invalid"); 你去!
    【解决方案2】:

    这个呢:

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

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

    【讨论】:

    • 您好 Nekto,我尝试了您的解决方案。但它没有用。它始终显示为黑色。但是 Jano 的解决方案对我有用。总之谢谢你的建议。
    【解决方案3】:

    您可以使用以 16 为基数的老式 C 函数 strtol

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-27
      • 2018-01-22
      • 2012-11-24
      • 2012-02-03
      • 2019-01-01
      • 2018-01-31
      • 2011-04-06
      • 2017-04-14
      相关资源
      最近更新 更多