iOS即时通讯iOS开发攻城狮的集散地

iOS开发: 将十六进制的编码转为 emoji 字符串

2018-08-11  本文已影响54人  伯wen
emoji emoji表情的十六进制编码
// 定义宏
#define EmojiCodeToSymbol(c) ((((0x808080F0 | (c & 0x3F000) >> 4) | (c & 0xFC0) << 10) | (c & 0x1C000) << 18) | (c & 0x3F) << 24)

#pragma mark - < emoji 表情 >

/**
 将十六进制的编码转为 emoji 字符串
 
 @param intCode 无符号 32 位整数
 @return 字符串
 */
+ (NSString *)emojiWithIntCode:(unsigned int)intCode
{
    unsigned int symbol = EmojiCodeToSymbol(intCode);
    NSString *string = [[NSString alloc] initWithBytes:&symbol length:sizeof(symbol) encoding:NSUTF8StringEncoding];
    
    if (string == nil) {
        string = [NSString stringWithFormat:@"%C", (unichar)intCode];
    }
    return string;
}

/**
 将十六进制的编码转为 emoji 字符串
 
 @param stringCode 十六进制格式的字符串, 例如`0x1f633`
 @return 字符串
 */
+ (NSString *)emojiWithStringCode:(NSString *)stringCode
{
    NSScanner *scanner = [[NSScanner alloc] initWithString:stringCode];
    
    unsigned int intCode = 0;
    
    [scanner scanHexInt:&intCode];
    
    return [self emojiWithIntCode:intCode];
}

/**
 返回当前十六进制格式字符串`0x1f633`对应的emoji字符串
 
 @return emoji 字符串
 */
- (NSString *)emoji
{
    return [NSString emojiWithStringCode:self];
}
NSString *code = @"0x1f603";
NSString *emoji = [code emoji];
上一篇 下一篇

猜你喜欢

热点阅读