如何在目标 C 中将 NSInteger 值转换为 int 值? [复制]
Posted
技术标签:
【中文标题】如何在目标 C 中将 NSInteger 值转换为 int 值? [复制]【英文标题】:How do I convert NSUInteger value to int value in objectiveC? [duplicate] 【发布时间】:2013-05-05 02:46:56 【问题描述】:如何在objectiveC中将NSUInteger
值转换为int
值?
还有如何在 NSLog
中打印 NSUInteger
值,我试过 %@,%d,%lu
这些都不起作用并抛出 Ex-Bad Access 错误。
谢谢
【问题讨论】:
这是%lu
,而不是@lu
。
【参考方案1】:
您好,它为我工作...
我试过这个..
NSUInteger inbox_count=9;
NSLog(@"inbox_count=%d",(int)inbox_count);
//output
inbox_count=9
谢谢大家..
【讨论】:
坏主意。在 OSX 上,NSUInteger 很长。因此,转换为 int 会溢出较大的值。对于 ios 来说可能没问题,但最好习惯以一种不会破坏其他版本的方式来做。 @SteveWaddicor 当您的收件箱包含超过 20 亿封邮件时,您还有其他问题。 这种情况的细节不是***答案的限制。其他人可能会尝试将损坏的代码应用于可以变得那么大的数字。做对更好,做错也不容易。 @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);
【讨论】:
以上是关于如何在目标 C 中将 NSInteger 值转换为 int 值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章