如何在Objective-C中将NSUInteger类型的值转换为int类型的值?

30

如何将 NSUInteger 值转换为 int 值在Objective-C中?

还有就是如何在 NSLog 中打印 NSUInteger 值,我尝试了 %@,%d,%lu,但它们都不起作用并且会抛出Ex-Bad Access错误。

谢谢


应该是 %lu,不是 @lu - Richard J. Ross III
4个回答

82
NSUInteger intVal = 10;
int iInt1 = (int)intVal;
NSLog(@"value : %lu %d", (unsigned long)intVal, iInt1);

了解更多,请查看此处


1
苹果的文档(您的链接)明确指出“将值转换为无符号长整型”以适用于 NSUInteger。因此,最后一行应该是 NSLog(@"the value is : %lu %d", (unsigned long)intVal, iInt1); - Nikolai Ruhe

4

int类型的显式转换

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

虽然,尽管...
NSLog(@"%lu",foo);

在当前版本的OSX上可以正常工作。但在其他构建中,如iOS,由于NSUInteger被定义为无符号整数,因此不安全。严格来说,需要先将其转换:

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

1
大家好,这对我有效...
我试过这个...
NSUInteger  inbox_count=9;
NSLog(@"inbox_count=%d",(int)inbox_count);

//output   
inbox_count=9

感谢所有人。。。

不好的想法。在OSX上,NSUInteger是long类型。因此,将其转换为int类型会导致大值溢出。这在iOS上可能没问题,但最好习惯以一种不会在其他构建中出错的方式来做。 - Steve Waddicor
2
@SteveWaddicor 当你的收件箱包含超过20亿封邮件时,你会遇到其他问题。 - Nikolai Ruhe
这个案例的具体情况并不是stackoverflow答案的限制。其他人可能会尝试将错误的代码应用于可以达到那么大的数字。在做错事情不更容易时,最好做对它。 - Steve Waddicor
@SteveWaddicor 我完全同意。只是这个案例的具体情况让我开了这个小玩笑。 - Nikolai Ruhe

0

就这么简单,

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


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


请解释一下“踩”的含义... - Thilina Chamath Hewagama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接