首页 > 技术精文 > C/C++ > JAVA或FLASH的UTF-8字节数组转VC++中GBK字符串
2014
12-16

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

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;
}
最后编辑:
作者:leehom
leehom
本博客主要是把自己的经验记录于此,方便自己以后查阅及其他遇到类似问题的朋友参考。如果你有觉得不错的文章,可以注册会员发布文章或者邮箱发给我文章地址,谢谢!
捐 赠如果觉得文章还不错,请麻烦点下广告,算是赞助下本站服务器费用,谢谢!

留下一个回复