《char*和wchar_t*相互轉換》
阿新 • • 發佈:2019-01-09
問題描述
新增其它類庫時,有兩個函式的實參與形參型別不符,就是char*和wchar_t*沒有相互轉換就使用了,具體情況如下所示:
error C2664: “strcpy”: 不能將引數 2 從“WCHAR [1]”轉換為“const char *”與指向的型別無關; 轉換要求 reinterpret_cast、C 樣式轉換或函式樣式轉換 error C2664: “CreateFileW”: 不能將引數 1 從“char [256]”轉換為“LPCWSTR”與指向的型別無關; 轉換要求 reinterpret_cast、C 樣式轉換或函式樣式轉換
解決方法
在CSDN看到了一篇比較好的博文,博主專門寫了兩個函式來進行轉換char*和wchar_t*
//char*轉wchar_t* wchar_t* CUsbIF::AnsiToUnicode(const char* szStr) { int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 ); if (nLen == 0) { return NULL; } wchar_t* pResult = new wchar_t[nLen]; MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen ); return pResult; } //wchar_t*ת轉char* char* CUsbIF::UnicodeToAnsi(const wchar_t* szStr) { int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL ); if (nLen == 0) { return NULL; } char* pResult = new char[nLen]; WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL ); return pResult; }