Iphone iOS转换十六进制值

Iphone iOS转换十六进制值,iphone,objective-c,ios,ios4,Iphone,Objective C,Ios,Ios4,如何将十六进制值转换成表情符号,我有一个如下字符串 NSString *myVal = @"1F61E"; 如何转换此文本以将其显示为表情符号 我发现了这个价值 请让我知道,我真的被这个问题难住了 更新 NSString *utf8String1 = @"1F61E"; NSString *a = [self convert:utf8String1]; NSLog(@"%@ &&&&&&&&&&&&

如何将十六进制值转换成表情符号,我有一个如下字符串

NSString *myVal = @"1F61E";
如何转换此文本以将其显示为表情符号

我发现了这个价值 请让我知道,我真的被这个问题难住了

更新

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



}
NSString*utf8String1=@“1F61E”;
NSString*a=[自转换:utf8String1];
NSLog(@“%@&&&&&&&&&&&&&&&&&&&&&&&&&,a);
-(NSString*)转换:(NSString*)解码{
unichar unicodeValue=(unichar)strtol([解码的UTF8String],NULL,16);
字符缓冲区[2];
int len=1;
如果(贬值>127){

缓冲区[0]=(unicodeValue>>8)和(1您的第一步是将其转换为数值:

unichar unicodeValue = (unichar) strtol([input UTF8String], NULL, 16);
然后,按照本节的规则:

char缓冲区[2];
int len=1;
如果(贬值>127){

缓冲区[0]=(unicodeValue>>8)和(1您尝试编码的代码点不适合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);

检查这个答案,这样就可以准确地解释:嗨,谢谢你的回复。这个nsstring的结果会是表情图标吗?或者我还需要做些什么才能显示出来。请让我看看know@user198725878很抱歉,我没有设备来测试此功能,您必须自己尝试!当我尝试使用nslo打印返回nsstring值时g它只是将我显示为“(null)”请让我知道,当我尝试使用nslog打印返回nsstring值时,它只是将我显示为“(null)”请让我know@user198725878您是否可以在字符串中使用\u1F61E简单地将其附加为字符?这比strtol方法简单得多。感谢您的回复。如何将我的变量转换为这种格式0x00、0x01、0cf6、0x1e?请告诉我谢谢您的帮助,请您解释一下它是如何实现的works@user198725878当然!
NSScanner
将十六进制值转换为4字节无符号整数、四个
&0xFF
操作“剪切”将单个8位部分放入一个4字节的
char
数组中,最后使用
NSUTF32StringEncoding
标志从这四个字节构造一个字符串,该标志表示每个字符串字符编码为一个四字节的UNICODE码点。
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);