2010-01-22 83 views
6

我想獲得NSNumber的無符號長整型值。我不知道爲什麼,但它不起作用。下面是我做的:無法獲得NSNumber的無符號長整型值

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

調試器中的值看起來像什麼?它們與打印的內容相同嗎? – 2010-01-22 23:14:11

+0

對於它的價值,在10.6.2,我得到8084143463兩次,並且調試器值是一致的。我建議用'NSString * stern = @「8084143463」;'替換你的第一行,然後重命名這些變量以使臨時觀察者有意義。 – 2010-01-22 23:18:25

+0

是的,NSNumber是8084143463和unsigned long 3789176167 – Flocked 2010-01-22 23:18:59

回答

9
8084143463 == 0x1e1da3d67 
3789176167 == 0x0e1da3d67 

64位系統上長整型的大小爲8個字節。在32位系統(如iPhone)上的長度大小是4個字節。您需要在iPhone上使用long long來存儲該值。

+0

這聽起來很合理,謝謝你的回答。但我用很長的時間試了一下fooo = [iddd longLongValue];並且foo又是3789176167 – Flocked 2010-01-22 23:28:08

+3

您還需要使用'%llu'的格式說明符。 – 2010-01-22 23:30:31

+0

現在它可以工作。只是忘了在NSLog中寫%llu。謝謝! – Flocked 2010-01-22 23:30:44

3

你的價值比一個unsigned long可容納最大值大 - 在32位模式(2^32 1 == 4,294,967,295)。

相關問題