是否可以将NSString转换为unichar

时间:2011-02-04 19:29:25

标签: objective-c unichar

我有一个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); 

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

2 个答案:

答案 0 :(得分:5)

%C format specifier将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

答案 1 :(得分:3)

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