如何将 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】:
我希望你的NamesCategoriesNSArrayCountString
是NSString
;
如果是,请使用下面的代码行。
NamesCategoriesNSArrayCountString = [NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]];
代替
[NamesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]];
【讨论】:
从 Xcode 4.5 开始,这将引发“格式字符串未使用的数据参数”警告。有谁知道正确的格式吗? 忽略最后。我有一个很长时间没有注意到的错字,而这个错字是导致错误的原因。[NSString stringWithFormat:@"%d", myNSUInteger]
仍然是正确的方法。
@andreas-ley 的回答更准确。 %d
是 signed 整数的格式字符串。 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 用于索引