iOS转换十六进制值

时间:2012-03-27 11:11:19

标签: iphone objective-c ios ios4

如何将十六进制值转换为表情符号图标,我有一个如下所示的字符串

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];



}

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

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

然后,遵循此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格式化字符串!