16 進数の文字列 (NSString) を数値型 (int) に変換する

NSColor が気の利かない子なので、#FFFFFF など 16 進数の色指定を各要素ごと自前で解析することに。


@"FF" のように、16 進数を表した NSString は、NSScannerScanHexInt: メソッドで、(unsigned)int 型の 255 に変換できます。

文字列は @"0xFF", @"0XFF" のほか、@"ff"@"fF" といった書き方でも構いません。

    unsigned int result;
    [[NSScanner scannerWithString:@"ff"] scanHexInt:&result];
    
    NSLog(@"result: %d", result);  // 255


また、参考元のページでは、以下のように NSStringカテゴリクラス拡張する方法もありました。

@interface NSString (HexIntValue)
- (unsigned int)hexIntValue;
@end

@implementation NSString (HexIntValue)

- (unsigned int)hexIntValue
{
    unsigned int result;
    [[NSScanner scannerWithString:self] scanHexInt:&result];
    return result;
}

@end

// 
// [@"ff" hexIntValue] で 16 進数化できるようになる
//