UNICODE编码下,LPCTSTR,LPCWSTR,LPCSTR转化为char*,及他们的相互转换(不用CString)

最近写代码,总是遇到unicode下麻烦的类型转换,因为用的是纯C,所以不接触CString,这里是我自己最常遇到的两种类型间的转换:

LPCTSTR或者LPCWSTR转换成char*:

使用核心的API是WideCharToMultiByte。直接上自己写的转换函数:

char* wtoc(LPCTSTR str)
{
 DWORD dwMinSize;
 dwMinSize = WideCharToMultiByte(CP_ACP,NULL,str,-1,NULL,0,NULL,FALSE); //计算长度
 char *bbb= new char[dwMinSize];
 WideCharToMultiByte(CP_OEMCP,NULL,str,-1,bbb,dwMinSize,NULL,FALSE);
 return bbb;
}


 

反过来,char* 或者const char*转换成LPCSTR(LPCWSTR)

wchar_t* ctow(const char *str)
{
wchar_t* buffer;
if(str)
    {
      size_t nu = strlen(str);
      size_t n =(size_t)MultiByteToWideChar(CP_ACP,0,(const char *)str,int(nu),NULL,0);
     buffer=0;
      buffer = new wchar_t[n+1];
     MultiByteToWideChar(CP_ACP,0,(const char *)str,int(nu),buffer,int(n));   
   }
return buffer;
delete buffer;
}


 

这里的返回值是宽字节的,也就是LPCSTR(LPCWSTR)。

 

大家根据自己遇到的宽字节和多字节的具体类型替换返回值类型和参数类型吧,自己验证过,功能很OK~

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值