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

问题描述 投票:90回答:7

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

例:

#01FFFFAB

应解析为整数:33554347

任何帮助,将不胜感激!

iphone objective-c string parsing hex
7个回答
165
投票

Joshua Weinberg的答案大多是正确的,但是当扫描十六进制整数时,0x前缀是可选的。如果你有#01FFFFAB格式的字符串,你仍然可以使用NSScanner,但你可以跳过第一个字符。

unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"#01FFFFAB"];

[scanner setScanLocation:1]; // bypass '#' character
[scanner scanHexInt:&result];

62
投票

你可以使用NSScanner

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

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


12
投票

strtol()是你的朋友。

它将一个字符串转换为一个long,你可以传入该数字的基数。尽管首先签署#sign,但是传递给strtol一个指向第一个数字字符的指针。


4
投票

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

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

快乐的编码!!!


1
投票

Swift 4标准库引入了新的初始化程序,用于解析所有整数类型。它使用字符串来解析基数(即基数)并返回可选的整数:

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

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];

0
投票

对于Swift 3:

var hex = "#01FFFFAB"
hex.remove(at: hex.startIndex)
var rgbValue:UInt32 = 0
Scanner(string: hex).scanHexInt32(&rgbValue)
// rgbValue == 33554347
© www.soinside.com 2019 - 2024. All rights reserved.