Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将十六进制颜色字符串转换为无符号长字符串_Ios_Iphone_Objective C - Fatal编程技术网

Ios 将十六进制颜色字符串转换为无符号长字符串

Ios 将十六进制颜色字符串转换为无符号长字符串,ios,iphone,objective-c,Ios,Iphone,Objective C,这是我的职责 我将“颜色”设置为如下所示: + (UIColor *)colorFromHex:(unsigned long)hex { return [UIColor colorWithRed:((float)((hex & 0xFF0000) >> 16))/255.0 green:((float)((hex & 0xFF00) >> 8))/255.0 blue:((float)(hex & 0xFF))/255.0 alpha:1.

这是我的职责

我将“颜色”设置为如下所示:

+ (UIColor *)colorFromHex:(unsigned long)hex
{
    return [UIColor colorWithRed:((float)((hex & 0xFF0000) >> 16))/255.0 green:((float)((hex & 0xFF00) >> 8))/255.0 blue:((float)(hex & 0xFF))/255.0 alpha:1.0];
}
现在的问题是:

我正在从plist文件中的服务器获取颜色代码 与pdColor一样:#8a32cb

我是这样分开的:

[self.view setBackgroundColor:[UIColor colorFromHex:0x8a32cb]];
pdCOlor是字符串格式。 我需要在这里应用它:

NSString *pdColor;
pdColor = [(NSString *)[temp objectForKey:@"pdColor"] stringByReplacingOccurrencesOfString:@"#" withString:@"0x"];
但它是无符号长的,所以没有正确的颜色代码


请帮我解决这个问题。

您不需要
字符串替换字符串的发生次数。
十六进制字符串可以通过
strtoul()
转换为数字。注意
+1
要跳过首字母
“#
字符:

[self.view setBackgroundColor:[UIColor colorFromHex:pdColor]];

请测试我的答案。你会在这里得到准确的结果

NSString *pdColor = [temp objectForKey:@"pdColor"]; // The string "#8a32cb"
unsigned long color = strtoul([pdColor UTF8String] + 1, NULL, 16);
[self.view setBackgroundColor:[UIColor colorFromHex:color]];
使用这些方法

NSScanner *scanner2 = [NSScanner scannerWithString:pdColor];
unsigned baseColor1;
[scanner2 scanHexInt:&baseColor1];
CGFloat red   = ((baseColor1 & 0xFF0000) >> 16) / 255.0f;
CGFloat green = ((baseColor1 & 0x00FF00) >>  8) / 255.0f;
CGFloat blue  =  (baseColor1 & 0x0000FF) / 255.0f;
[self.view setBackgroundColor:[UIColor colorWithRed:red green:green blue:blue alpha:1.0]];
只需将十六进制字符串,例如@“#8a32cb”传递给第一个方法,它将返回一个
UICOLOR


希望这能对您有所帮助。

我喜欢转换和删除的方式。因此,1
-(UIColor *) colorWithHexString: (NSString *) hexString {
    NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @"#" withString: @""] uppercaseString];
    CGFloat alpha, red, blue, green;
    alpha = 1.0f;
    red   = [self colorComponentFrom: colorString start: 0 length: 2];
    green = [self colorComponentFrom: colorString start: 2 length: 2];
    blue  = [self colorComponentFrom: colorString start: 4 length: 2];
    return [UIColor colorWithRed: red green: green blue: blue alpha: alpha];
}


-(CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (NSUInteger) length {
    NSString *substring = [string substringWithRange: NSMakeRange(start, length)];
    NSString *fullHex = length == 2 ? substring : [NSString stringWithFormat: @"%@%@", substring, substring];
    unsigned hexComponent;
    [[NSScanner scannerWithString: fullHex] scanHexInt: &hexComponent];
    return hexComponent / 255.0;
}
NSString *pdColor =[[temp objectForKey:@"pdColor"] stringByReplacingOccurrencesOfString:@"#" withString:@""];
NSScanner* scanner = [NSScanner scannerWithString:pdColor];
unsigned int hex;
[scanner scanHexInt:&hex];
UIColor *color = [UIColor colorFromHex:hex];