我正在制作一个基本方法,它采用Flickr图像URL并返回图像的ID。
我将方法传递给NSString
@"http://farm6.staticflickr.com/5183/5629026092_c6762a118f"
。
目标是返回int:5629026092
,它位于图片的网址中,是图片的ID。
这是我的方法:
-(int)getImageIDFromFlickrURL:(NSString *)imageURL{
NSArray *objectsInURLArray = [imageURL componentsSeparatedByString:@"/"];
NSString *lastObjectInFlickrArray = [objectsInURLArray lastObject];
NSArray *dirtyFlickrIdArray = [lastObjectInFlickrArray componentsSeparatedByString:@"_"];
NSString *flickIDString = [dirtyFlickrIdArray objectAtIndex:0];
NSLog(@"flickr id string: %@",flickIDString);
int flickrID = [flickIDString intValue];
NSLog(@"id: %i",flickrID);
return flickrID;
}
控制台中的输出是:
2012-05-26 13:30:25.771 TestApp[1744:f803] flickr id string: 5629026092
2012-05-26 13:30:25.773 TestApp[1744:f803] id: 2147483647
为什么调用intValue
会使实际数字变形?
答案 0 :(得分:1)
使用long long
,您的号码大于int
可以处理(最多为2147483647
,如您在第二个日志中所示)
答案 1 :(得分:1)
您的值太大而无法以32位表示。可以存储在带符号的32位整数(int)中的最大值是2147483647.对于无符号整数,它是4294967295.您需要转换为长整数来表示一个大到5629026092的数字。
您可能需要为此创建一个数字格式化程序。我不是数字格式化方面的专家,而且总是需要挖掘文档来弄清楚如何使用它们。
我刚尝试过,这段代码有效:
NSString *numberString = @"5629026092";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
NSNumber *number = [formatter numberFromString: numberString];
long long value = [number longLongValue];
NSLog(@"%@ = %qi", numberString, value);
[formatter release];
您还可以将字符串转换为C字符串并使用scanf来考虑它。
答案 2 :(得分:0)
Easy ^^:INT_MAX int类型变量的最大值。 2147483647
答案 3 :(得分:0)
我发现这是一种方便的方法:
NSString *flickIDString = [dirtyFlickrIdArray objectAtIndex:0]; // read some huge number into a string
// read into a NSNumber object or a long long variable. you choose
NSNumber *flickIDNumber = flickIDString.longLongValue;
long long flickIDLong = flickIDString.longLongValue;