Objective-C:将十六进制字符串转换为整数以比较哪个更大

时间:2014-01-16 00:25:05

标签: objective-c hex nsscanner

我的目标是比较两个十六进制字符串并确定哪个数字更高。我假设我需要将这些十六进制字符串转换为整数,以便能够以数学方式对它们进行比较,但转换为unsigned不起作用。这是我尝试过的:

NSString *firstHex = @"35c1f029684fe";
NSString *secondHex = @"35c1f029684ff";

unsigned first = 0;
unsigned second = 0;

NSScanner *firstScanner = [NSScanner scannerWithString:firstHex];
NSScanner *secondScanner = [NSScanner scannerWithString:secondHex];

[firstScanner scanHexInt:&first];
[secondScanner scanHexInt:&second];

NSLog(@"First: %d",first);
NSLog(@"Second: %d",second);

但是日志输出给了我:

First: -1
Second: -1

我无法弄清楚我做错了什么。我在这里正确使用NSScanner吗?提前谢谢。

3 个答案:

答案 0 :(得分:6)

您的十六进制数字长度为13位 - 52位二进制位。这超过32位,使用long long变量和scanHexLongLong:代替。

答案 1 :(得分:0)

为了完整起见,这里是使用上述答案建议的工作代码:

NSString *firstHex = @"35c1f029684fe";
NSString *secondHex = @"35c1f029684ff";

unsigned long long first = 0;
unsigned long long second = 0;

NSScanner *firstScanner = [NSScanner scannerWithString:firstHex];
NSScanner *secondScanner = [NSScanner scannerWithString:secondHex];

[firstScanner scanHexLongLong:&first];
[secondScanner scanHexLongLong:&second];

NSLog(@"First: %llu",first);
NSLog(@"Second: %llu",second);

if(first > second){
  NSLog(@"First is greater");
}else{
  NSLog(@"Second is greater");
}

答案 2 :(得分:0)

找出哪一个更大的字符串必须更快:

  1. 较长的字符串较大(忽略前导0)
  2. 如果它们是相同的那么你可以转换每个字符并比较,重复每个字符...