char *和wchar_t *的相互轉換,可使用標准庫函數
size_t mbstowcs(wchar_t *wcstr, const char *mbstr, size_t count)和size_t wcstombs(char *mbstr, const wchar_t *wcstr, size_t count)
注意
微軟文檔對mbstowcs的描述有誤,mbstowcs, _mbstowcs_l | Microsoft Docs

若mbstowcs成功地轉換了源字符串,它返回已轉換的多字節字符的數量。這句話是錯誤的,應參考cppreference的描述,std::mbstowcs - cppreference.com

成功,則返回寫入目標數組的寬字符的數量,不包括L'\0'。這句才是正解
另外,根據微軟文檔的描述,若參數wcstr為NULL,函數返回目標字符串的要求大小(以寬字符為單位)
多字節字符串到寬字符串的轉換示例
#include <iostream> using namespace std; int main() { setlocale(LC_ALL, ""); const char *mbString = "多字節字符串到寬字符串的轉換"; size_t requiredSize = mbstowcs(nullptr, mbString, 0); wchar_t *wcString = new wchar_t[requiredSize + 1]; if (static_cast<size_t>(-1) == mbstowcs(wcString, mbString, requiredSize + 1)) { cout << "Couldn't convert string: invalid multibyte character." << endl; } else { wcout << "wcString: " << wcString << endl; } delete[] wcString; return 0; }
寬字符串到多字節字符串的轉換示例
#include <iostream> using namespace std; int main() { setlocale(LC_ALL, ""); const wchar_t *wcString = L"寬字符串到多字節字符串的轉換"; size_t requiredSize = wcstombs(nullptr, wcString, 0); char *mbString = new char[requiredSize + 1]; if (static_cast<size_t>(-1) == wcstombs(mbString, wcString, requiredSize + 1)) { cout << "Couldn't convert string: invalid wide character" << endl; } else { cout << mbString << endl; } delete[] mbString; return 0; }
