如何将NSUInteger转换为NSString?

26

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

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

37

当使用支持 arm64 的编译选项时,这将不会生成警告:

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

10
对于NSUInteger类型,可以使用%zd格式化字符串,无需进行类型转换。 - Paul Peelen
1
@PaulPeelen 你是不是想说 NSInteger - Andreas Ley
1
我的错.. 我当然是指 %tu(因为它是无符号的)。 - Paul Peelen

7

我希望你的NamesCategoriesNSArrayCountStringNSString类型;如果是,使用以下代码:

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

而不是

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

从Xcode 4.5开始,这将会抛出一个“数据参数未被格式字符串使用”的警告。有人知道正确的格式吗? - GeneralMike
忽略上一个。我有一个错别字很长时间没有注意到,而这个错别字是导致错误的原因。[NSString stringWithFormat:@"%d", myNSUInteger] 仍然是正确的方法。 - GeneralMike
1
@andreas-ley 的回答更加准确。%d是用于有符号整数的格式字符串。NSUInteger是无符号长整型。当超出了无符号和有符号范围的重叠部分时,必须使用%lu,否则会打印出负数,而实际上该数字是正数。 - Ben

6

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

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

或者,针对您的情况:
NSUInteger namesCategoriesNSArrayCount = [self.NamesCategoriesNSArray count];  
NSLog(@"--- %tu", namesCategoriesNSArrayCount);  
[namesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%tu", namesCategoriesNSArrayCount]];  
NSLog(@"=== %@", namesCategoriesNSArrayCountString);
< p > (另外,提示:变量以小写字母开头。信息:这里

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

1
请注意,虽然“tu”现在可以工作,但不能保证。请参见此处:https://dev59.com/HGMk5IYBdhLWcg3w3xrq - Andreas Ley
非常正确。我其实不知道那个。将来记住这点很好。 - Paul Peelen

5
您也可以使用以下方法:
NSString *rowString = [NSString stringWithFormat: @"%@",  @(row)];

其中row是一个NSUInteger。


0

这篇来自苹果公司的 字符串格式说明符 文章是针对在需要格式化苹果数据类型时的详细说明:

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 显示为十六进制

查看文章了解更多详情。


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