2015-08-18 9 views
0

Я хочу, чтобы разобрать несколько шестнадцатеричных чисел из разделенных пробелами строки до 20 номеров:Как сканировать шестнадцатеричные целые числа, множественное число?

79 1A 03 00 09 21 22 AA BB CC DD EE FF A1 A2 A3 A4 A5 A6 A7 

unsigned result = 0; 
NSScanner *scanner = [NSScanner scannerWithString:@"79 1A 03 00"]; 

[scanner setScanLocation:0]; 
[scanner scanHexInt:&result]; 

Но scanHexInt, кажется, только отсканировать одно значение. Есть ли более чистый способ сканирования строки в массив значений?

scanHexInt docs

Objective-C parse hex string to integer

+0

использовать цикл для сканирования каждого значения. – rmaddy

ответ

0
NSArray *numberTokens = [text componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" "]]; 
    for (NSString* token in numberTokens) { 
    if (0 < token.length) { 
     NSLog(@"%@: %i", token, token.intValue); 
    } 
    } 
+0

Проще использовать '[text componentsSeparatedByString: @" "];' – rmaddy

+1

'NSString intValue' не будет анализировать шестнадцатеричные значения. Он работает только с десятичными значениями. – rmaddy

0

Вы можете использовать большую часть кода у вас уже есть, просто настроить scanLocation в цикле:

NSString *string = @"79 1A 03 00 09 21 22 AA BB CC DD EE FF A1 A2 A3 A4 A5 A6 A7"; 
unsigned result = 0; 
NSScanner *scanner = [NSScanner scannerWithString:string]; 

// Skip ahead 3 characters (2 hex digits + 1 space) 
// after each iteration. 
for (NSUInteger i=0; i < string.length; i+=3) { 
    [scanner setScanLocation:i]; 
    [scanner scanHexInt:&result]; 

    NSLog(@"%d", result); 
} 
Смежные вопросы