2015-03-20 1 views
0

В ролях нет правильного слова, но голые со мной. У меня есть следующая строка:Как я могу нарисовать 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?

ответ

0

Оказывается, это чрезвычайно просто:

unsigned int bitshiftString; 
[[NSScanner scannerWithString:flags] scanHexInt:&bitshiftString];