我有一个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);
当我看到日志时,每次运行代码时它会给出不同的字符。 我错过了什么......?
答案 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
。