Objective c -[NSString intValue]返回的值与字符串显示的值完全不同
我有一个数字字符串,并且观察到一个离散度,它的Objective c -[NSString intValue]返回的值与字符串显示的值完全不同,objective-c,ios,nsstring,Objective C,Ios,Nsstring,我有一个数字字符串,并且观察到一个离散度,它的intValue与其字符串值相差很大。代码如下: NSString *string = [result objectForKey:@"id"]; NSLog(@"ID %@",string); NSLog(@"ID as integer %i",[string intValue]); 给出一个输出: "ID 100004378121454" "ID as integer 2147483647" 我能做出的唯一逻辑猜测是字符串太长,无法转换为int
intValue
与其字符串值相差很大。代码如下:
NSString *string = [result objectForKey:@"id"];
NSLog(@"ID %@",string);
NSLog(@"ID as integer %i",[string intValue]);
给出一个输出:
"ID 100004378121454"
"ID as integer 2147483647"
我能做出的唯一逻辑猜测是字符串太长,无法转换为int
。。。在任何情况下,我尝试了longLongValue
等-得到不同的结果,但不是它应该得到的结果。您的数字(100004378121454)比简单的整数可以处理的数字大,在这种情况下,您必须使用long
类型(不要将您的数字截断为int32的最大值):
输出:
ID 100004378121454
ID as long long 100004378121454
您是对的,您已经达到了32位int的极限,但是longValue应该可以工作。那么结果是什么?尝试使用无符号int(u_int32最大值9223372036854775808)您知道“string”实际上是一个NSString而不是NSNumber吗?您可能要查询该类。@elio.d,它将是有符号64位整数的最大值。一个无符号32位整数的最大值约为40亿。多亏了所有的评论和这个答案,我对我应该在%后面加什么首字母以使它正确地输出一个long-long感到困惑…干杯
ID 100004378121454
ID as long long 100004378121454