最近寫代碼,總是遇到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~