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://it72.com:4443/433.htm