参照のみを残して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 。 返す私は、 }