size_t _wcstombs(char* dst, const wchar_t* src, size_t size)
{
size_t i = 0;
while (*src && i < size)
{
if (*src < 0x80)
{
*dst++ = static_cast<char>(*src++);
++i;
}
else if (*src < 0x800)
{
*dst++ = static_cast<char>((*src >> 6) | 0xC0);
*dst++ = static_cast<char>((*src++ & 0x3F) | 0x80);
i += 2;
}
else if (*src < 0x10000)
{
*dst++ = static_cast<char>((*src >> 12) | 0xE0);
*dst++ = static_cast<char>(((*src >> 6) & 0x3F) | 0x80);
*dst++ = static_cast<char>((*src++ & 0x3F) | 0x80);
i += 3;
}
else
{
*dst++ = '?';
++src;
++i;
}
}
if (i < size)
*dst = '\0';
return i;
}
[/QUOTE]