utf8-unicode

VOID UCS2_TO_UTF8(char *dst, wchar_t *src)
{
	wchar_t t;

	while (t = *src)
	{
		if (t <= 0x7F)
		{
			dst[0] = (t & 0x7F);

			dst += 1;
			src++;
		}
		else if (t <= 0x7FF)
		{
			dst[0] = (6 << 5) | (t >> 11);
			dst[1] = (2 << 6) | (t & 0x3F);

			dst += 2;
			src++;
		}
		else
		{
			dst[0] = (14 << 4) | (t >> 12);
			dst[1] = (2 << 6)  | ((t >> 6) & 0x3F);
			dst[2] = (2 << 6)  | (t & 0x3F);

			dst += 3;
			src++;
		}
	}
	*dst = '\0';
}

VOID UTF8_TO_UCS2(wchar_t *dst, char *src)
{
	char t;
	long n;

	while (t = *src)
	{
		n = 0;
		while (t & 0x80)
		{
			n++;
			t = t << 1;
		}
		switch (n)
		{
		case 0:
			{
				dst[0] = (src[0] & 0x7F);
				dst++;
				src += 1;
			}
			break;
		case 2:
			{
				dst[0] = ((src[0] & 0x1F) << 6) | (src[1] & 0x3F);
				dst++;
				src += 2;
			}
			break;
		case 3:
			{
				dst[0] = ((src[0] & 0x1F) << 12) | ((src[1] & 0x3F) << 6) | (src[2] & 0x3F);
				dst++;
				src += 3;
			}
			break;
		default:
			{
				*dst = L'\0';
				return;
			}
			break;
		}
	}
	*dst = L'\0';
}

你可能感兴趣的:(utf8-unicode)