iOS開發(fā): 將十六進(jìn)制的編碼轉(zhuǎn)為 emoji 字符串

  • emoji表情鍵盤如下:
emoji
  • 在OC中, emoji表情的十六進(jìn)制編碼如下:
emoji表情的十六進(jìn)制編碼
  • 想要將emoji表情的十六進(jìn)制編碼轉(zhuǎn)成具體的 emoji 字符串, 就需要使用下面的方法(這里將代碼寫到了NSString的分類中)
// 定義宏
#define EmojiCodeToSymbol(c) ((((0x808080F0 | (c & 0x3F000) >> 4) | (c & 0xFC0) << 10) | (c & 0x1C000) << 18) | (c & 0x3F) << 24)

#pragma mark - < emoji 表情 >

/**
 將十六進(jìn)制的編碼轉(zhuǎn)為 emoji 字符串
 
 @param intCode 無(wú)符號(hào) 32 位整數(shù)
 @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;
}

/**
 將十六進(jìn)制的編碼轉(zhuǎn)為 emoji 字符串
 
 @param stringCode 十六進(jìn)制格式的字符串, 例如`0x1f633`
 @return 字符串
 */
+ (NSString *)emojiWithStringCode:(NSString *)stringCode
{
    NSScanner *scanner = [[NSScanner alloc] initWithString:stringCode];
    
    unsigned int intCode = 0;
    
    [scanner scanHexInt:&intCode];
    
    return [self emojiWithIntCode:intCode];
}

/**
 返回當(dāng)前十六進(jìn)制格式字符串`0x1f633`對(duì)應(yīng)的emoji字符串
 
 @return emoji 字符串
 */
- (NSString *)emoji
{
    return [NSString emojiWithStringCode:self];
}
  • 使用時(shí)只需要使用編碼調(diào)用即可:
NSString *code = @"0x1f603";
NSString *emoji = [code emoji];
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容