// Unicode string converted to Unicode data // return the length of the converted Unicode data int convunistr2unicode (lpcstr szunicodestring, wchar * pwchar, int ibuffsize) {int iret = 0; int iustrlen = strlen (szunicodestring); Assert (pwchar); Assert (iustrlen % 6 = 0); int ioffset = 0; while (ioffset <iustrlen) & (iret <iBuffSize-1) {const char * pstr = strstr (szunicodestring + ioffset, "\ U"); If (pstr) {uint wchar =-1; sscanf_s (pstr + 2, "% x", & wchar); pwchar [iret ++] = wchar; pwchar [iret] = 0; ioffset + = 6 ;} else {break ;}}return iret;} // convert Unicode data to a unicode string // return the converted String Data Length int convunicode2unistr (wchar * pwchar, char * pchar, int ibuffsize) {assert (pchar); char subbuff [8]; int ilength = 0; int imaxlen = wcslen (pwchar); For (INT I = 0; (I <imaxlen) & (ilength + 6) <(iBuffSize-1); I ++) {sprintf_s (subbuff, "\ U % 04x", pwchar [I]); strcpy_s (pchar + ilength, ibuffsize, subbuff); ilength + = 6;} return ilength ;}
// Test code cstringa pachar1 = ("\ u6d4b \ u8bd5"); wchar [10]; convunistr2unicode (pachar1, wchar, 9); char Achar [64]; convunicode2unistr (wchar, Achar, 64); outputdebugstringw (wchar); outputdebugstringa (Achar );
// Test output
Test \ u6d4b \ u8bd5