ユニコードへのUTF8

参照のみを残してUnicodeへのJSON UTF8(提供STM32の熱群友人)は、その正確性および利用可能を保証するものではありません。

U32 UTF8_to_Unicode(CHAR * DST、CHAR * SRC)   // JSON UTF8にユニコード
{ 
    iはU32 = 0、ユニコード= 0 、II、III。
    int型 codeLen = 0 ; 
    
    一方、(* SRC)
    { 
        // 1 UTF-8 --->ユニコード
        場合0 ==(SRC [ 0 ]&0x80の))
        { 
            // 单字节 
            codeLen = 1 
            ユニコード = SRC [ 0 ]。
        } 
         もし0xC0の ==(SRC [ 0 ]&0xE0となっ)&& は0x80 ==(SRC [ 1 ]&0xC0の))
        { // 双字节 
            codeLen = 2 
            ユニコード =(U32)((((U32)SRC [ 0 ]&0x001F)<< 6)|((U32)SRC [ 1 ]&0x003F ))。
        } 
        そう であれば0xE0となっ ==(SRC [ 0 ]&0xF0が)&& は0x80 ==(SRC [ 1 ]&0xC0の)&& は0x80 ==(SRC [ 2 ]&0xC0の))
        { // 三字节 
            codeLen = 3 
            II =(((U32)SRC [ 0 ]&0x000F)<< 12 )。
            III =(((U32)SRC [ 1 ]&0x003F)<< 6 )。
            ユニコード = II | III |((U32)SRC [ 2 ]&0x003F )。
            ユニコード =(U32)((((U32)SRC [ 0 ]&0x000F)<< 12)|(((U32)SRC [1 ]&0x003F)<< 6)| ((U32)SRC [ 2 ]&0x003F ))。
        } 
        そう であれば0xF0が ==(SRC [ 0 ]&0xF0が)&& は0x80 ==(SRC [ 1 ]&0xC0の)&& は0x80 ==(SRC [ 2 ]&0xC0の)&& は0x80 ==(SRC [ 3 ]&0xC0の))
        { // 四字节 
            codeLen = 4 
            ユニコード =(((int型)(SRC [ 0 ]&0x07の))<< 18)| (((int型)(SRC [ 1 ]&は0x3F))<< 12)| (((int型)(SRC [ 2 ]&は0x3F))<< 6)| (SRC [ 3 ]&は0x3F )。
        } 
        
        { 
            ブレーク
        } 
        SRC + = codeLen。
        もし(ユニコード< 0x80の
        { 
            場合(I == 0 &&ユニコード== 0x20の
            { 
                続けます
            } 
        } 
        、I + = 2 ;
        * DST ++ =(U8)((ユニコード&0xffの));
        * DST ++ =(U8)(((ユニコード>> 8)&0xffの))。
    } // 一方端 
    * DST = 0 
    
    返す私は、
}

 

おすすめ

転載: www.cnblogs.com/LittleTiger/p/12187600.html