2012-05-26 2 views
1

Я делал базовый метод, который принимает URL-адрес изображения Flickr и возвращает идентификатор изображения. Я передаю метод NSString@"http://farm6.staticflickr.com/5183/5629026092_c6762a118f".NSString intValue deforming фактическое число

Целью является возвращение int: 5629026092, который находится на URL-адресе изображения и является идентификатором изображения.

Вот мой метод:

-(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

возможно дубликат [Преобразование строки в целое в Objective C, изменив значение] (http://stackoverflow.com/questions/10606281/ convert-string-to-int-in-object-c-change-the-value) –

+0

Вы можете использовать NSInteger вместо int для хранения большего числа. – lnafziger

ответ

1

Используйте long long вместо этого, ваше число больше int может работать (макс быть 2147483647, как вы можете видеть в своем втором журнале)

0

Easy ^^: INT_MAX Максимальное значение для переменной типа Int. 2147483647

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 строки и использовать зсапЕ, задумайтесь об этом.

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; 
Смежные вопросы