JAVA或FLASH的UTF-8字节数组转VC++中GBK字符串

Home / C++ MrLee 2014-12-16 2696

JAVA、FLASH中一般通讯数组是UTF-8格式的字节数组,直接拿到VC++中当字符串显示会显示烫烫烫烫烫或者其它的乱码,这就是数组不是以0结尾导致的,所以我们在用之前把这个数组最后一位变成0就行了。 下面是多字符集中把utf8格式的byte数组转换成可见gbk格式的char数组。
/**用于转换JAVA或者FLASH平台UTF-8字节数组**/
static char* GT_UTF8ToGBK(char* utf,int nLen)
{
	//字节数组以0结尾 先用一个内存处理
	char* pByte = new char[nLen+1];
	for(int i=0;i<nLen;i++)
		pByte[i] = utf[i] & 0xFF;
	pByte[nLen] = 0;//不添加0结尾会出现字符串无结尾造成内存越界
	//开始转换宽字符
	int len = MultiByteToWideChar(CP_UTF8,0,pByte,-1,NULL,0);
	wchar_t* pUTF = new wchar_t[len];//宽字符串格式 len已经包含0结束
	MultiByteToWideChar(CP_UTF8,0,pByte,-1,pUTF,len);
	delete pByte;
	//宽字符再转成多字符
	len = WideCharToMultiByte(CP_ACP,0,pUTF,-1,NULL,0,NULL,NULL);
	char* pGBK = new char[len];//GBK格式 len已经包含0结束
	WideCharToMultiByte(CP_ACP,0,pUTF,-1,pGBK,len,NULL,NULL);
	delete pUTF;
	return pGBK;
}
//GBK格式的可以直接显示
static char* GT_GBKToASCII(char* utf,int nLen)
{
	//字节数组以0结尾 先用一个内存处理
	char* pByte = new char[nLen+1];
	for(int i=0;i<nLen;i++)
		pByte[i] = utf[i] & 0xFF;
	pByte[nLen] = 0;//不添加0结尾会出现字符串无结尾造成内存越界
	return pByte;
}

本文链接:https://www.it72.com/433.htm

推荐阅读
最新回复 (0)
返回