2012-09-29 7 views
5

Mam ciąg numeryczny i zaobserwowałem rozbieżność, gdzie jego intValue znacznie różni się od wartości ciągu. Poniższy kod:- [NSString intValue] zwracanie zupełnie innej wartości niż ciąg znaków mówi

NSString *string = [result objectForKey:@"id"]; 
NSLog(@"ID %@",string); 
NSLog(@"ID as integer %i",[string intValue]); 

daje wynik:

"ID 100004378121454" 
"ID as integer 2147483647" 

Jedyne logiczne przypuszczenie mogę sprawić, że łańcuch jest zbyt długi, aby być konwertowane do int ... W każdym razie starałem longLongValue i podobne - do różnych wyników, ale nie do tych, które powinny być.

+3

Masz rację, że osiągasz granice 32-bitowej int, ale wartość LonglongValue powinna działać. Jaki jest zatem wynik? –

+0

spróbuj użyć unsigned int (u_int32 maksymalna wartość 9 223 372,036,854,775,808) –

+0

Czy wiesz, że "ciąg" jest w rzeczywistości NSString i nie NSNumber? Możesz zapytać o klasę. –

Odpowiedz

14

Twój numer (100004378121454) jest większa liczba niż prosty int może obsłużyć, trzeba użyć long long typ w tym przypadku (aby nie uzyskać numer obcięty do int32 maksymalnej wartości):

NSString *string = @"100004378121454"; 
NSLog(@"ID %@",string); 
NSLog(@"ID as long long %lli",[string longLongValue]); 

Output :

ID    100004378121454 
ID as long long 100004378121454 
+1

Dzięki wszystkim komentarzom i tej odpowiedzi, byłem po prostu zakłopotany, jakie inicjały miałem umieścić po%, aby uzyskać długi wynik poprawnie ... otuchy – Genhain