【问题标题】:Can´t get the unsigned long value of a NSNumber无法获得 NSNumber 的无符号长值
【发布时间】:2010-01-22 23:03:16
【问题描述】:

我想得到一个 NSNumber 的 unsigned 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];

【问题讨论】:

  • 调试器中的值是什么样的?它们和打印的一样吗?
  • 对于它的价值,在 10.6.2 上,我两次都得到 8084143463,并且调试器值是一致的。我建议将您的第一行替换为 NSString * stern = @"8084143463"; 并重命名变量以使其对不经意的观察者有意义。
  • 是的,NSNumber 是 8084143463 和 unsigned long 3789176167
  • 奇怪,我试过 numberFromString:@"12345" 然后 fooo 得到正确的值。但我想要船尾字符串中的数字。

标签: iphone objective-c xcode


【解决方案1】:
8084143463 == 0x1e1da3d67
3789176167 == 0x0e1da3d67

在 64 位系统上 long 的大小是 8 个字节。在 32 位系统(如 iPhone)上 long 的大小为 4 个字节。您需要在 iPhone 上使用 long long 来存储该值。

【讨论】:

  • 这听起来很逻辑,谢谢你的回答。但我尝试了 long long fooo = [iddd longLongValue]; foo 又是 3789176167
【解决方案2】:

您的值大于 unsigned long 在 32 位模式下可以容纳的最大值 (2^32 - 1 == 4,294,967,295)。

【讨论】:

    猜你喜欢
    • 2010-12-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多