【问题标题】:How do I convert NSUInteger value to int value in objectiveC? [duplicate]如何在目标 C 中将 NSInteger 值转换为 int 值? [复制]
【发布时间】:2013-05-05 02:46:56
【问题描述】:

如何在objectiveC中将NSUInteger值转换为int值?

还有如何在 NSLog 中打印 NSUInteger 值,我试过 %@,%d,%lu 这些都不起作用并抛出 Ex-Bad Access 错误。

谢谢

【问题讨论】:

  • 这是%lu,而不是@lu

标签: ios objective-c int nsuinteger


【解决方案1】:

您好,它为我工作...

我试过这个..

NSUInteger  inbox_count=9;
NSLog(@"inbox_count=%d",(int)inbox_count);

//output   
inbox_count=9

谢谢大家..

【讨论】:

  • 坏主意。在 OSX 上,NSUInteger 很长。因此,转换为 int 会溢出较大的值。对于 iOS 来说可能没问题,但最好习惯以一种不会破坏其他版本的方式来做。
  • @SteveWaddicor 当您的收件箱包含超过 20 亿封邮件时,您还有其他问题。
  • 这种情况的细节不是stackoverflow答案的限制。其他人可能会尝试将损坏的代码应用于可以变得那么大的数字。做对更好,做错也不容易。
  • @SteveWaddicor 我完全同意。正是这个案子的细节让我开了这个小玩笑。
【解决方案2】:

就这么简单,

NSUInteger uintV = 890;
int intVal = (int) uintV;
NSLog(@"the value is : %lu", (unsigned long)intVal);


这将打印出类似这样的内容,
值为:890

【讨论】:

  • 请解释否决票...
【解决方案3】:
NSUInteger intVal = 10;
int iInt1 = (int)intVal;
NSLog(@"value : %lu %d", (unsigned long)intVal, iInt1);

更多参考,请看here

【讨论】:

  • Apple 的文档(您的链接)明确声明“将值转换为无符号长整数”。为NSUInteger。所以最后一行应该是NSLog(@"the value is : %lu %d", (unsigned long)intVal, iInt1);
  • @NikolaiRuhe 感谢指出我的错误,我已经更新了我的答案
【解决方案4】:

显式转换为 int

NSUInteger foo = 23;
int bar = (int)foo;

虽然

NSLog(@"%lu",foo);

在当前的 OSX 版本上可以正常工作。这是不安全的,因为 NSUInteger 在其他版本中被定义为 unsigned int 。比如iOS。严格的答案是先投射:

NSLog(@"%lu",(unsigned long)foo);

【讨论】:

    猜你喜欢
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    • 2013-08-03
    • 2010-10-13
    • 2017-01-18
    • 1970-01-01
    • 2013-01-10
    相关资源
    最近更新 更多