2010-01-22 26 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)。

相关问题