WCHAR 和 char的相互转换

目录

WCHAR 和 char的相互转换

char 转换成WCHAR很好转换,用L"",LP(""),_T(""),TEXT(""),将ASCII单字节字符转换成UNICODE字符还有很多方法,就列举一些。

然而微软给了我们那么多单字节转换成双字节的方法,为啥就没有找到一个简单的双字节转换单字节的方法呢?虽然unicode很好,很强大,但是还有许许多多的代码用的是ascii写的啊,难道说把别人写好了的代码再写一次吗?或者说别人封装成了dll,com,我们就没法了啊。。。

找了很久,没有发现微软给我们提供有直接的转换方法。【如果有记得一定跟帖】

没有办法,只有自己写了。

char * ch=new char[50];

WCHAR *p=new WCHAR[25];

p=_T(“made by crazy!”);

for(int i=0;i<wcslen(p);i++)

{

ch[i]=(char *)p[i];

}

ch[i]=’\0';

cout«ch;

ok!转换完成,如果谁有更好的方法,谢谢跟帖,大家一起分享。

睡觉了,明天写一个完整的函数出来。····

不好意思,由于小弟才疏学浅,导致了上面的解决办法误导了大家。对不起大家了,尽管上面的方法能够正确执行,但是有种多此一举的感觉。

经过长期考证:原来在C++标准里面已经提供了:

宽字节转单字节 : size_t wcstombs( char ***** mbstr , const wchar_t ***** wcstr , size_t count );

单字节转宽字节 : size_t mbstowcs( wchar_t ***** wcstr , const char ***** mbstr , size_t count );

上面这两个是标准C++的,下面两个好像是微软的函数。不过上面两个函数只能一个一个的转换,也就是说一次只能转换一个字符。下面两个方法就是 宽字符串与单字节字符串之间的转换。

宽字节转多字节 :WideCharToMultiByte //其实这里的多字节就是我们说的char

多字节转宽字节 :MultiByteToWideChar //多字节也就是ASCII单字节

这四种方法。

下面给一个 宽字符串 转换为 char字符串 的例子。

   BSTR devname;   //olewchar 其实就是wchar  
    char *name=NULL;  
    pNCP->get_Name(&devname);  
    DWORD n=WideCharToMultiByte(CP_OEMCP,NULL,devname,-1,NULL,0,NULL,FALSE);  
    name=new char[n];  
    WideCharToMultiByte(CP_OEMCP,NULL,devname,-1,name,n,NULL,FALSE);  
    cout<<name<<endl;  
    delete [] name;

下面是将 char字符串 转换为 unicode字符串,也就是宽字符。

char sText[20] = {“其实我就是所谓的多字节字符串”};

DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, sText, -1, NULL, 0);
wchar_t *pwText;
pwText = new wchar_t[dwNum];

MultiByteToWideChar (CP_ACP, 0, pwText, -1, sText, dwSize);
if(!pwText)
{
delete []pwText;
}