2010-01-22 8 views
6

NSNumber의 부호없는 long 값을 가져 오려고합니다. 왜 그런지 모르지만 작동하지 않습니다. 여기에 내가 무슨 짓을 :NSNumber의 부호없는 long 값을 가져올 수 없습니다.

NSString * stern = [idd objectAtIndex:indexPath.row]; // get a String with Number from a NSArray 
NSNumberFormatter * lols = [[NSNumberFormatter alloc] init]; 
NSNumber * iddd = [lols numberFromString:stern]; 
NSLog(@"%@", iddd); // I get the right number: 8084143463 
unsigned long fooo = [iddd unsignedLongValue]; 
NSLog(@"%lu", fooo); // I get the wrong number: 3789176167 
[twitterEngine deleteUpdate:fooo]; 
+0

디버거에서 값은 어떻게 보입니까? 인쇄 된 것과 같은 것입니까? –

+0

10.6.2에서는 두 번 모두 8084143463이 나오고 디버거 값은 일관성이 있습니다. 첫 번째 줄을 NSString * stern = @ "8084143463";으로 대체하고 임시 변수에 영향을주지 않도록 변수의 이름을 바꾸는 것이 좋습니다. –

+0

네 NSNumber는 8084143463이고 부호가없는 long은 3789176167 – Flocked

답변

9
8084143463 == 0x1e1da3d67 
3789176167 == 0x0e1da3d67 

64 비트 시스템에서 long의 크기는 8 바이트입니다. 32 비트 시스템 (iPhone과 같은)에서 long의 크기는 4 바이트입니다. 값을 저장하려면 iPhone에서 long long을 사용해야합니다.

+0

답변을 주셔서 감사합니다. 그러나 나는 long long fooo = [iddd longLongValue]로 시도했다. foo가 다시 나타납니다. 3789176167 – Flocked

+3

'% llu'의 형식 지정자를 사용해야합니다. –

+0

아, 이제 작동합니다. NSLog에 % llu를 쓰는 것을 잊어 버렸습니다. 감사! – Flocked

3

귀하의 값이 부호 길이가 가질 수있는 최대 값보다 큰 - 32 비트 모드 (2^32 1 == 4,294,967,295).

관련 문제