如何将char*转换为wchar

2025-12-18 03:34:54
推荐回答(2个)
回答1:

C++标准中,wchar_t是宽字符类型,每个wchar_t类型占2个字节,16位宽。汉字的表示就要用到wchar_t 。char,我们都知道,占一个字节,8位宽。其实知道了这个以后,要在wchar_t 和 char两种类型之间转换就不难实现了。

wchar_t 转换为char 的代码如下:

有如下的wchar_t和char变量

wchar_t w_cn = '中';
char c_cn[2] = {'0'} ;

char *C2W(wchar_t w_cn , char c_cn[2])

{

//following code convert wchar to char
c_cn[0] = w_cn >> 8 ;
c_cn[1] = w_cn ;
c_cn[2] = '\0';

return c_cn ;

}

其中需要注意的是一个16位的wchar_t需要用两个8位的char来存储之。我们可以发现另外一个问题,wchar_t的高位字节应该存储在char数组的低位字节。(这里没有仔细研究了,觉得怪怪的)。

这是完成了wchar_t到char的转化

回答2:

char 转 WCHAR
WCHAR * charToWchar(char *s){
int w_nlen=MultiByteToWideChar(CP_ACP,0,s,-1,NULL,0);
WCHAR *ret;
ret=(WCHAR*) malloc(sizeof(WCHAR)*w_nlen);
memset(ret,0,sizeof(ret));
MultiByteToWideChar(CP_ACP,0,s,-1,ret,w_nlen);
return ret;
}
返回结果用完要free掉.

WCHAR 转char

char* WCharToChar(WCHAR *s){
int w_nlen=WideCharToMultiByte(CP_ACP,0,s,-1,NULL,0,NULL,false);
char *ret=new char[w_nlen];
memset(ret,0,w_nlen);
WideCharToMultiByte(CP_ACP,0,s,-1,ret,w_nlen,NULL,false);
return ret;
}
返回结果用完要free掉.