最近写代码,总是遇到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~