如何将 NSUInteger 转换为 NSString?

Posted

技术标签:

【中文标题】如何将 NSUInteger 转换为 NSString?【英文标题】:How do you convert an NSUInteger into an NSString? 【发布时间】:2011-03-01 14:11:15 【问题描述】:

如何将NSUInteger 转换为NSString?我试过了,但我的NSString 一直返回 0。

NSUInteger NamesCategoriesNSArrayCount = [self.NamesCategoriesNSArray count];  
NSLog(@"--- %d", NamesCategoriesNSArrayCount);  
[NamesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%d",    NamesCategoriesNSArrayCount]];  
NSLog(@"=== %d", NamesCategoriesNSArrayCountString);

【问题讨论】:

【参考方案1】:

在支持arm64 的情况下编译时,不会产生警告:

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];

【讨论】:

%zd for NSUInteger,没有类型转换。 @PaulPeelen 你的意思是说NSInteger 我的错……我的意思是,当然,%tu(因为它没有签名)。【参考方案2】:

我希望你的NamesCategoriesNSArrayCountStringNSString; 如果是,请使用下面的代码行。

NamesCategoriesNSArrayCountString  = [NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]];

代替

[NamesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]];

【讨论】:

从 Xcode 4.5 开始,这将引发“格式字符串未使用的数据参数”警告。有谁知道正确的格式吗? 忽略最后。我有一个很长时间没有注意到的错字,而这个错字是导致错误的原因。 [NSString stringWithFormat:@"%d", myNSUInteger] 仍然是正确的方法。 @andreas-ley 的回答更准确。 %dsigned 整数的格式字符串。 NSUInteger 是一个 unsigned long 整数。一旦超出无符号和有符号范围之间的重叠,就需要使用%lu,否则会打印一个负值,而实际上该数字是正数。【参考方案3】:

arm64 编译时,请使用以下内容以避免出现警告:

[NSString stringWithFormat:@"%tu", myNSUInteger];

或者,在你的情况下:

NSUInteger namesCategoriesNSArrayCount = [self.NamesCategoriesNSArray count];  
NSLog(@"--- %tu", namesCategoriesNSArrayCount);  
[namesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%tu", namesCategoriesNSArrayCount]];  
NSLog(@"=== %@", namesCategoriesNSArrayCountString);

(另外,提示:变量以小写字母开头。信息:here)

【讨论】:

请注意,虽然tu 现在可以工作,但不能保证。见这里:***.com/questions/18893880/… 非常正确。其实我不知道。为未来记住这一点很好。【参考方案4】:

你也可以使用:

NSString *rowString = [NSString stringWithFormat: @"%@",  @(row)];

其中 row 是 NSUInteger。

【讨论】:

【参考方案5】:

这篇来自 Apple 的 String Format Specifiers 文章专门针对需要格式化 Apple 类型的情况:

OS X 使用多种数据类型(NSInteger、NSUInteger、CGFloat 和 CFIndex)来提供在 32 位和 64 位环境中表示值的一致方法。在 32 位环境中,NSInteger 和 NSUInteger 分别定义为 int 和 unsigned int。在 64 位环境中,NSInteger 和 NSUInteger 分别定义为 long 和 unsigned long。为避免需要根据平台使用不同的 printf 样式类型说明符,您可以使用表 3 中显示的说明符。请注意,在某些情况下您可能需要强制转换值。

[NSString stringWithFormat:@"%ld", (long)value] : NSInteger 显示为十进制 [NSString stringWithFormat:@"%lx", (long)value] : NSInteger 显示为十六进制 [NSString stringWithFormat:@"%lu", (unsigned long)value] : NSUInteger 显示为十进制 [NSString stringWithFormat:@"%lx", (unsigned long)value] : NSUInteger 显示为十六进制 [NSString stringWithFormat:@"%f", value] : CGFloat [NSString stringWithFormat:@"%ld", (long)value] : CFIndex 显示为十进制 [NSString stringWithFormat:@"%lx", (long)value] : CFIndex 显示为十六进制

查看文章了解更多详情。

【讨论】:

以上是关于如何将 NSUInteger 转换为 NSString?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ARC 将 NSUInteger 转换为字符串 [重复]

NSNumber 为 0 转换为 NSInteger/NSUInteger 变为 nil

int 或 NSInteger 到 NSUInteger 用于索引

如何在目标 C 中将 NSInteger 值转换为 int 值? [复制]

将字符串转换为int-objective c [重复]

NSInteger 和 NSUInteger 在混合的 64 位 / 32 位环境中