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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objective-C将十六进制字符串解析为整数相关的知识,希望对你有一定的参考价值。

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

例:

#01FFFFAB

应解析为整数:33554347

任何帮助,将不胜感激!

答案

Joshua Weinberg的答案大多是正确的,但是当扫描十六进制整数时,0x前缀是可选的。如果你有#01FFFFAB格式的字符串,你仍然可以使用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()是你的朋友。

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

另一答案

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

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

快乐的编码!!!

另一答案

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

let number = Int("01FFFFAB", radix: 16)!
另一答案

根据苹果:

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];
另一答案

对于Swift 3:

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

以上是关于Objective-C将十六进制字符串解析为整数的主要内容,如果未能解决你的问题,请参考以下文章

如何将十六进制颜色字符串解析为整数

将十六进制字符串解析为整数会引发 NumberFormatException?

Swift将十六进制字符串或字符转换为整数

将二进制字符串解析为整数时出现数字格式异常

如何在颤动中将十六进制颜色代码解析为它们各自的整数值

c_cpp Objective-C类将十六进制字符串转换为UIColor。支持#RGB#ARGB #RRGGBB #AARRGGBBUsage:[UIColor colorWithHexString: