如何将unicode十六进制数变量转换为NSString中的字符?

时间:2015-06-13 08:49:24

标签: ios objective-c unicode nsstring uilabel

现在我有一系列unicode数字,我想在UILabel中显示它们,如果我对它们进行硬编码我可以显示它们,但是这太慢了,所以我想用变量替换它们,然后更改变量和得到相关的人物。 例如,现在我知道unicode是U + 095F,我想在UILabel中显示U + 095F到U + 096f的范围,我可以用硬编码这样做

  

NSString * str = [NSString stringWithFormat:@“\ u095f”];

但我想这样做

  

NSInteger十六进制= 0x095f;

     

[NSString stringWithFormat:@“\ u%ld”,(long)hex];

我可以自动更改十六进制,就像使用@"%ld", (long)hex一样,所以任何人都知道如何实现它?

3 个答案:

答案 0 :(得分:4)

您可以使用十六进制字节的缓冲区初始化字符串(只需提供其指针)。重点是,重要的是要提供要应用的字符编码。具体来说,您应该注意字节顺序。

以下是一个例子:

UInt32 hex = 0x095f;
NSString *unicodeString = [[NSString alloc] initWithBytes:&hex length:sizeof(hex) encoding:NSUTF32LittleEndianStringEncoding];

请注意,只要将它们用于16位unicode字符,使用%C格式的解决方案就可以了。像emojis这样的32位unicode字符(例如:0x1f601,0x1f41a)将无法使用简单格式化。

答案 1 :(得分:0)

像这样:

unichar charCode = 0x095f;
NSString *s = [NSString stringWithFormat:@"%C",charCode];
NSLog(@"String = %@",s); //Output:String = य़

答案 2 :(得分:0)

你必须使用

[NSString stringWithFormat:@"%C", (unichar)hex];

或直接将unichar (unsigned short)声明为

unichar uni = 0x095f;
[NSString stringWithFormat:@"%C", uni];

有用的资源可能是String Format Specifiers,其中%C列为

  

16位Unicode字符(unichar),由NSLog()作为ASCII字符打印,如果不是ASCII字符,则以八进制格式\ ddd或Unicode十六进制格式\ udddd打印,其中d是数字。