utf8Str --UTF8 dest code
utf8strlen --max utf8 length
unStr -- Unicode Str Source
unMaxlen --Unicode 最大个数
return : --实际转换的长度
short FromUnicodeToUTF8 (LPSTR utf8Str, short utf8StrLen, WORD * unStr, unsigned short unMaxLen)
{
short unlen = 0;
short utflen = 0;
WORD *src;
src = unStr;
for (; (unlen <= unMaxLen - 1) && (*src != 0x00) && (utflen <= utf8StrLen);)
{
if (((*src) & 0xff80) == 0) //1byte
{
*utf8Str = (char) (*src);
utflen += 1;
}
else if (((*src) & 0xf800) == 0) //2bytes
{
*utf8Str = (char) ((((*src) >> 6) & 0x1f) | 0xc0);
utf8Str++;
*utf8Str = (char) (((*src) & 0x003f) | 0x80);
utflen += 2;
}
else //3bytes
{
*utf8Str = (char) ((((*src) >> 12) & 0x000f) | 0xe0);
utf8Str++;
*utf8Str = (char) ((((*src) >> 6) & 0x3f) | 0x80);
utf8Str++;
*utf8Str = (char) (((*src) & 0x003f) | 0x80);
utflen += 3;
}
unlen++;
src++;
utf8Str++;
}
*utf8Str = 0x00;
return utflen;
}