1. 程式人生 > >《char*和wchar_t*相互轉換》

《char*和wchar_t*相互轉換》

問題描述 

新增其它類庫時,有兩個函式的實參與形參型別不符,就是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;
}