2012-03-27 107 views
6

如何转换十六进制值成表情符号图标,我有一个字符串像下面的iOS转换十六进制数值

NSString *myVal = @"1F61E"; 

我如何转换这个文本,以显示它的表情符号charrcaters?

我发现,价值from this link 请让我知道,我真的卡住了这个问题

Updated

NSString *utf8String1 = @"1F61E"; 
NSString *a = [self convert:utf8String1]; 
NSLog(@"%@ &&&&&&&&&&&&&&&&&&&&&",a); 


-(NSString*)convert:(NSString*)decoded{ 

    unichar unicodeValue = (unichar) strtol([decoded UTF8String], NULL, 16); 
    char buffer[2]; 
    int len = 1; 

    if (unicodeValue > 127) { 
     buffer[0] = (unicodeValue >> 8) & (1 << 8) - 1; 
     buffer[1] = unicodeValue & (1 << 8) - 1; 
     len = 2; 
    } else { 
     buffer[0] = unicodeValue; 
    } 

    return [[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding]; 



} 
+0

检查所以这个答案,解释正是这一点: http://stackoverflow.com/questions/1775859/how-to-convert-a- unichar-value-to-nsstring-in-objective-c – 2012-03-27 11:27:22

回答

4

您尝试编码的代码点不适合16位。因此,你需要使用UTF-32编码:

NSScanner *scan = [[NSScanner alloc] initWithString:@"1F61E"]; 
unsigned int val; 
[scan scanHexInt:&val]; 
char cc[4]; 
cc[3] = (val >> 0) & 0xFF; 
cc[2] = (val >> 8) & 0xFF; 
cc[1] = (val >> 16) & 0xFF; 
cc[0] = (val >> 24) & 0xFF; 
NSString *s = [[NSString alloc] 
    initWithBytes:cc 
      length:4 
     encoding:NSUTF32StringEncoding]; 
NSLog(@"[%@]", s); 
+0

谢谢你的答复。我可以吗?将我的变量转换为这种格式0x00,0x01,0cf6,0x1e?请让我知道 – user198725878 2012-03-27 13:15:22

+0

@ user198725878请参阅我的编辑。 – dasblinkenlight 2012-03-27 13:20:08

+0

非常感谢您的帮助,请帮我解释一下它是如何工作的 – user198725878 2012-03-28 03:32:01

0

的第一步是将其转换为它的数值:

unichar unicodeValue = (unichar) strtol([input UTF8String], NULL, 16); 

然后,按照规则th是post

char buffer[2]; 
int len = 1; 

if (unicodeValue > 127) { 
    buffer[0] = (unicodeValue >> 8) & (1 << 8) - 1; 
    buffer[1] = unicodeValue & (1 << 8) - 1; 
    len = 2; 
} else { 
    buffer[0] = unicodeValue; 
} 

return [[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding]; 

你现在有你的UTF-8格式化字符串!

+0

嗨,谢谢你的答复。这个nsstring的结果会是表情符号图标吗?或者我还需要做些什么才能显示出来.pls让我知道 – user198725878 2012-03-27 12:05:20

+0

@ user198725878对不起,我没有一个设备来测试它,你必须自己尝试! – 2012-03-27 12:06:26

+0

当我试图打印返回nsstring值使用nslog它只是显示我为“(null)”请让我知道 – user198725878 2012-03-27 12:18:56