Преобразование шестнадцатеричного значения из строки в шестнадцатеричный цветовой код - PullRequest
2 голосов
/ 17 сентября 2011

В проекте 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 ]

8 голосов
/ 27 сентября 2011
NSScanner *scanner = [NSScanner scannerWithString:hexString];
unsigned hex;
BOOL success = [scanner scanHexInt:&hex];
UIColor *color = UIColorFromRGB(hex);
0 голосов
/ 27 сентября 2011

Вы можете использовать старую старую добрую функцию C strtol с основанием 16.

const char* cString = [myStr cStringUsingEncoding:[NSString defaultCStringEncoding]];
int hexValue = (int)strtol(cString, NULL, 16);
UIColor *color = UIColorFromRGB(hexValue);
0 голосов
/ 27 сентября 2011

Что по этому поводу:

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

Я не проверял это. Так что сообщите мне, если возникнут проблемы.

...