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