2

我有一个 NSString 对象并想将其更改为 unichar。

int decimal = [[temp substringFromIndex:2] intValue]; // decimal = 12298

NSString *hex = [NSString stringWithFormat:@"0x%x", decimal]; // hex = 0x300a

NSString *chineseChar = [NSString stringWithFormat:@"%C", hex];

// This statement log a different Chinese char every time I run this code 
NSLog(@"%@",chineseChar); 

当我看到日志时,每次运行代码时它都会给出不同的字符。我错过了什么...?

4

2 回答 2

5

%C格式说明符将16 位 Unicode 字符 ( unichar) 作为输入,而不是NSString. 你传入一个NSString,它被重新解释为一个整数字符;由于每次运行时字符串可以存储在内存中的不同地址,因此您会将该地址作为整数获得,这就是为什么每次运行代码时都会获得不同的中文字符的原因。

只需将字符作为整数传入:

unichar decimal = 12298;
NSString *charStr = [NSString stringWithFormat:@"%C", decimal];
// charStr is now a string containing the single character U+300A,
// LEFT DOUBLE ANGLE BRACKET
于 2011-02-04T19:35:13.357 回答
3

怎么样-[NSString characterAtIndex:]?它需要一个字符索引并返回一个unichar.

于 2011-02-04T19:35:01.140 回答