【问题标题】:How do you convert an NSUInteger into an NSString?如何将 NSUInteger 转换为 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);

【问题讨论】:

    标签: objective-c nsstring nsuinteger


    【解决方案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

    【讨论】:

    【解决方案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 显示为十六进制

      查看文章了解更多详情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-10
        • 2013-07-24
        • 2011-04-17
        • 2010-11-20
        • 2010-12-19
        • 2011-04-27
        相关资源
        最近更新 更多