Objective-C将十六进制字符串解析为整数

时间:2010-09-06 00:29:07

标签: iphone objective-c string parsing hex

我想知道如何在Objective-C中解析表示数字的十六进制字符串。我愿意同时使用目标或基于C的方法,也没关系。

示例:

#01FFFFAB

应解析为整数:     33554347

任何帮助将不胜感激!

7 个答案:

答案 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