boolUnicode::wstringToString(constwstring&s, string&t) { wchar_twc; for (wstring::size_typei=0;i<s.length();++i) { wc=s[i]; if (wc<0x80) { t+=static_cast<char>(wc); }elseif (wc<0x800) { t+=0xc0| (wc>>6); t+=0x80| (wc&0x3f); #ifSIZEOF_WCHAR_T>=4 }elseif (wc<0x10000) { #else }else{ #endif t+=0xe0| (wc>>12); t+=0x80| ((wc>>6) &0x3f); t+=0x80| (wc&0x3f); #ifSIZEOF_WCHAR_T>=4 }elseif (wc<0x10FFFF) { t+=0xf0| (wc>>18); t+=0x80| ((wc>>12) &0x3f); t+=0x80| ((wc>>6) &0x3f); t+=0x80| (wc&0x3f); }else{ returnfalse; #endif } } returntrue; }
中间用到宏,参考定义
#ifdefined(_WIN32) #defineSIZEOF_WCHAR_T2 #elif (defined(__sun) &&defined(__sparc)) || \ ((defined(__linux) ||defined(__FreeBSD__)) && (defined(__i386) ||defined(__x86_64))) #defineSIZEOF_WCHAR_T4 #endif