1

我正在制作一个采用 Flickr 图片 URL 并返回图片 ID 的基本方法。我将方法传递给NSString @"http://farm6.staticflickr.com/5183/5629026092_c6762a118f".

目标是返回 int: 5629026092,它位于图像的 URL 中并且是图像的 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变形实际数字?

4

4 回答 4

1

改用long long,您的数量大于int可以处理的数量(最大值2147483647,您可以在第二个日志中看到)

于 2012-05-26T19:42:07.660 回答
1

您的值太大而无法以 32 位表示。您可以存储在有符号 32 位整数 (int) 中的最大值是 2147483647。对于无符号整数,它是 4294967295。您需要转换为 long long 整数来表示 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,想想看。

于 2012-05-26T20:25:16.187 回答
0

Easy ^^: INT_MAX int 类型变量的最大值。2147483647

于 2012-05-26T19:43:03.803 回答
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;
于 2012-06-08T23:11:47.660 回答