我想知道如何在Objective-C中解析表示数字的十六进制字符串。我愿意同时使用目标或基于C的方法,也没关系。
示例:
#01FFFFAB
应解析为整数: 33554347
任何帮助将不胜感激!
答案 0 :(得分:165)
Joshua Weinberg的回答大多是正确的,但是当扫描十六进制整数时,0x
前缀是可选的。如果您的格式为#01FFFFAB
,则仍然可以使用NSScanner
,但您可以跳过第一个字符。
unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"#01FFFFAB"];
[scanner setScanLocation:1]; // bypass '#' character
[scanner scanHexInt:&result];
答案 1 :(得分:62)
您可以将NSScanner用于此
unsigned int outVal;
NSScanner* scanner = [NSScanner scannerWithString:@"0x01FFFFAB"];
[scanner scanHexInt:&outVal];
outVal
将包含您正在寻找的int。 0x是可选的。
答案 2 :(得分:12)
strtol()是你的朋友。
它将一个字符串转换为一个long,你可以传入该数字的基数。然后首先#先签名,或者传递给strtol一个指向第一个数字字符的指针。
答案 3 :(得分:4)
您可以使用以下行进行转换。它只有一行代码:
NSString *hexString = @"01FFFFAB";
length = (UInt64)strtoull([hexString UTF8String], NULL, 16);
NSLog(@"The required Length is %d", length);
快乐编码!!!
答案 4 :(得分:1)
Swift 4 标准库引入了用于解析所有整数类型的新初始化程序。它需要使用字符串解析基数(即基数)并返回可选的整数:
let number = Int("01FFFFAB", radix: 16)!
答案 5 :(得分:0)
根据苹果:
NSScanner对象解释并转换一个字符 NSString对象为数字和字符串值。
所以,如果你有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];
答案 6 :(得分:0)
对于Swift 3:
var hex = "#01FFFFAB"
hex.remove(at: hex.startIndex)
var rgbValue:UInt32 = 0
Scanner(string: hex).scanHexInt32(&rgbValue)
// rgbValue == 33554347