【问题标题】:iOS Convert Hex valueiOS 转换十六进制值
【发布时间】:2012-03-27 11:11:18
【问题描述】:

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

NSString *myVal = @"1F61E";

如何转换此文本以将其显示为表情符号字符?

我找到了 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];



}

【问题讨论】:

标签: iphone objective-c ios ios4


【解决方案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);

【讨论】:

  • 感谢您的回复。如何将我的变量转换为这种格式 0x00、0x01、0cf6、0x1e?请告诉我
  • 非常感谢您的帮助,请您解释一下它是如何工作的
  • @user198725878 当然! NSScanner 将您的十六进制值转换为 4 字节无符号 int,四个 &gt;&gt;&amp; 0xFF 操作将单独的 8 位部分“切出”为 char 的 4 字节数组,最后构造一个字符串这四个字节带有NSUTF32StringEncoding 标志,表示每个字符串字符都被编码为一个四字节的UNICODE 代码点。
【解决方案2】:

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

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 格式的字符串!

【讨论】:

  • 嗨,谢谢你的回复。这个 nsstring 的结果会是表情符号图标吗?还是我还需要做任何事情才能显示出来。请告诉我
  • @user198725878 抱歉,我没有可以测试的设备,您必须自己尝试!
  • 当我尝试使用 nslog 打印返回 nsstring 值时,它只是将我显示为“(null)”请告诉我
  • 当我尝试使用 nslog 打印返回 nsstring 值时,它只是将我显示为“(null)”请告诉我
  • @user198725878 您是否可以在字符串中使用 \u1F61E 将其简单地附加为字符?这会比 strtol 方法容易得多。
猜你喜欢
  • 1970-01-01
  • 2015-02-23
  • 2014-02-05
  • 2010-10-04
  • 1970-01-01
  • 2018-07-26
  • 2011-08-04
  • 2018-01-22
相关资源
最近更新 更多