Objective-C analysiert Hexadezimalzeichenfolgen in Ganzzahl

Ich würde gerne wissen, wie man in Objective-C eine Hexadezimalzahl parsen kann, die eine Zahl darstellt. Ich bin bereit, sowohl eine objektive, als auch eine C-basierte Methode zu verwenden, beides ist in Ordnung.

Beispiel:

#01FFFFAB 

sollte in die ganze Zahl analysieren: 33554347

Jede Hilfe wäre willkommen!

Solutions Collecting From Web of "Objective-C analysiert Hexadezimalzeichenfolgen in Ganzzahl"

Joshua Weinbergs Antwort ist größtenteils korrekt, jedoch ist das Präfix 0x optional, wenn hexadezimale Ganzzahlen gescannt werden. Wenn Sie eine Zeichenfolge im Format #01FFFFAB , können Sie weiterhin NSScanner , aber Sie können das erste Zeichen überspringen.

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

Sie können NSScanner dafür verwenden

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

outVal enthält das Int, nach dem Sie suchen. Die 0x ist optional.

strtol () ist dein Freund.

Es konvertiert eine Zeichenfolge in eine lange, und Sie können die Basis der Zahl in übergeben. Entfernen Sie diese # zunächst aber ab, oder übergeben Sie, um einen pointers auf das erste numerische Zeichen strtol.

Sie können die untere Zeile für die Konvertierung verwenden. Es ist nur ein Zeilencode:

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

Glückliche Kodierung !!!

Laut Apfel:

Ein NSScanner-Objekt interpretiert und konvertiert die Zeichen eines NSString-Objekts in Zahlen- und Zeichenfolgenwerte.

NSData , wenn du NSData hast, kannst du als nächstes tun

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

Für Swift 3:

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

Die Swift 4- Standardbibliothek führte einen neuen Initialisierer zum Parsen aller Integer-Typen ein. Es braucht String, um mit Radix (dh Basis) zu analysieren, und gibt optionale Ganzzahl zurück:

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