【问题标题】:NSString intValue deforming actual numberNSString intValue 变形实际数字
【发布时间】:2012-06-01 21:48:02
【问题描述】:

我正在制作一个基本方法,它采用 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会使实际号码变形?

【问题讨论】:

标签: objective-c cocoa-touch nsstring integer


【解决方案1】:

我发现这是一种方便的方法:

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;

【讨论】:

    【解决方案2】:

    您的值太大,无法以 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,想想吧。

    【讨论】:

      【解决方案3】:

      改用long long,您的数字大于int 可以处理的数量(最大值为2147483647,如您在第二个日志中所见)

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-11
          • 2012-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多