Objective-C analizar cadena hexadecimal a entero

Me gustaría saber cómo analizar una cadena hexadecimal, que representa un número, en Objective-C. Estoy dispuesto a utilizar un método objective o basado en C, o bien está bien.

ejemplo:

#01FFFFAB 

debería analizar el número entero: 33554347

¡Cualquier ayuda sería apreciada!

La respuesta de Joshua Weinberg es en su mayoría correcta, sin embargo, el prefijo 0x es opcional al escanear enteros hexadecimales. Si tiene una cadena en el formato #01FFFFAB , aún puede usar NSScanner , pero puede omitir el primer carácter.

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

puedes usar NSScanner para esto

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

outVal contendrá la int que estás buscando. El 0x es opcional.

strtol () es tu amigo.

Convierte una cadena en una larga, y puede pasar la base del número. Sin embargo, primero quite la señal de #, o pase a Strtol un puntero al primer carácter numérico.

Puede usar la siguiente línea para la conversión. Es solo un código de línea:

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

Happy Coding !!!

De acuerdo con la manzana:

Un objeto NSScanner interpreta y convierte los caracteres de un objeto NSString en valores numéricos y de cadena.

entonces, si tienes NSData obj puedes hacer luego

 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 Swift 3:

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

La biblioteca estándar Swift 4 introdujo un nuevo inicializador para analizar todos los tipos de enteros. Se necesita cadena para analizar con radix (es decir, base) y devuelve un entero opcional:

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