0
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        NSNumber *str = [NSNumber numberWithChar:'x'];

        NSLog(@"%@",str);

    }
    return 0;
}

这将打印数字 120,而不是字符“x”。为什么这样做?

4

2 回答 2

3

这并没有错:ASCII 码x是十进制的 120。该'x'语法是一种方便的语法,用于输入使用 ASCII 字符表示的小整数常量;除了语法之外,单引号中的常量是常规整数。

如果您希望将数字重新解释为字符,请在NSLog调用中使用相应的格式说明符,并从对象中获取char值:NSNumber

NSNumber *str = [NSNumber numberWithChar:'x'];
NSLog(@"%c", [str charValue]);
于 2012-08-24T03:51:42.910 回答
1

来自NSNumber 文档

NSNumber 是 NSValue 的子类,它提供任何 C 标量(数字)类型的值。

在这种情况下,它保存x的是 ASCII 码——你怎么能指望一个数字结构来保存一个字母?;))

如果要使用 char,请坚持使用char. 如果您需要整个字符串,请使用NSString.

于 2012-08-24T03:54:38.827 回答