Objective-C将hexstringparsing为整数

我想知道如何parsing一个hexstring,表示一个数字,在Objective-C中。 我愿意同时使用一个客观的,或者一个基于C的方法,或者没有问题。

例:

#01FFFFAB 

应parsing为整数:33554347

任何帮助将不胜感激!

Joshua Weinberg的回答大部分都是正确的,但是当扫描hex整数时0x前缀是可选的。 如果格式为#01FFFFAB的string仍然可以使用NSScanner ,但可以跳过第一个字符。

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

你可以使用NSScanner

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

outVal将包含你正在寻找的int。 0x是可选的。

strtol()是你的朋友。

它将一个string转换为一个longtypes,并且可以传递该数字的基数。尽pipe如此,先删除#号,或者传递一个指向第一个数字字符的指针。

您可以使用下面的行进行转换。 它只有一行代码:

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

快乐编码!

据苹果介绍:

NSScanner对象将NSString对象的字符解释并转换为数字和string值。

所以,如果你有NSData obj你可以做下一步

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

对于Swift 3:

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