Objective-C analisa string hexadecimal para inteiro

Eu gostaria de saber como analisar uma cadeia hexadecimal, representando um número, em Objective-C. Estou disposto a usar tanto um objective quanto um método baseado em C, ou está bem.

exemplo:

#01FFFFAB 

deve analisar no inteiro: 33554347

Qualquer ajuda seria apreciada!

A resposta de Joshua Weinberg é na maior parte correta, entretanto o prefixo 0x é opcional ao escanear inteiros hexadecimais. Se você tiver uma string no formato #01FFFFAB , ainda poderá usar o NSScanner , mas poderá pular o primeiro caractere.

 unsigned result = 0; NSScanner *scanner = [NSScanner scannerWithString:@"#01FFFFAB"]; [scanner setScanLocation:1]; // bypass '#' character [scanner scanHexInt:&result]; 

você pode usar o NSScanner para isso

 unsigned int outVal; NSScanner* scanner = [NSScanner scannerWithString:@"0x01FFFFAB"]; [scanner scanHexInt:&outVal]; 

outVal conterá o int que você está procurando. O 0x é opcional.

strtol () é seu amigo.

Converte uma string para um longo, e você pode passar a base do número para dentro. Desmarque que # desligue primeiro, ou passe para strtol um ponteiro para o primeiro caractere numérico.

Você pode usar a linha abaixo para conversão. É apenas um código de linha:

 NSString *hexString = @"01FFFFAB"; length = (UInt64)strtoull([hexString UTF8String], NULL, 16); NSLog(@"The required Length is %d", length); 

Codificação Feliz !!!

De acordo com a maçã:

Um object NSScanner interpreta e converte os caracteres de um object NSString em valores numéricos e de string.

Então, se você tiver NSData obj u pode fazer o próximo

 NSString *dataDescription = data.description; NSString *dataAsString = [dataDescription substringWithRange:NSMakeRange(1, [dataDescription length]-2)]; unsigned intData = 0; NSScanner *scanner = [NSScanner scannerWithString:dataAsString]; [scanner scanHexInt:&intData]; 

Para o Swift 3:

 var hex = "#01FFFFAB" hex.remove(at: hex.startIndex) var rgbValue:UInt32 = 0 Scanner(string: hex).scanHexInt32(&rgbValue) // rgbValue == 33554347 

A biblioteca padrão do Swift 4 introduziu um novo inicializador para analisar todos os tipos inteiros. Leva string para analisar com radix (ou seja, base) e retorna inteiro opcional:

 let number = Int("01FFFFAB", radix: 16)!