Как я могу использовать NSString как шестнадцатеричное представление NSInteger

В ролях — не то слово, но потерпите меня. У меня есть следующая строка:

NSString *string = @"01700000";

Однако мне нужно проверить, содержит ли он определенный бит, который я ищу:

if (bitshift & (1 << 21)) {
    NSLog(@"YES");
} else {
    NSLog(@"NO");
}

Получение целочисленного значения с помощью [string integerValue] приводит к неожиданным результатам:

NSInteger bitshift = (1 << 24) | (1 << 22) | (1 << 21) | (1 << 20);
NSString *flags = @"01700000";
NSInteger bitshiftString = [flags integerValue];

// bitshift: 1700000, bitshiftString: 19f0a0
NSLog(@"bitshift: %tx, bitshiftString: %tx", bitshift, bitshiftString);

Каким будет наиболее подходящий способ сканирования этого строкового значения в NSInteger?


person squarefrog    schedule 20.03.2015    source источник


Ответы (1)


Оказывается, это восхитительно просто:

unsigned int bitshiftString;
[[NSScanner scannerWithString:flags] scanHexInt:&bitshiftString];
person squarefrog    schedule 20.03.2015