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?
c_cpp Objective-C类将十六进制字符串转换为UIColor。支持#RGB#ARGB #RRGGBB #AARRGGBBUsage:[UIColor colorWithHexString: