C++ WINDOWS下 wchar_t *和char * 相互轉化總結篇


說道wchar_t和char兩個類型大家都不會陌生

wchar_t:在windows下是Unicode 16編碼,也就是俗稱寬字節

char:當然就是指一個字節,在windows下面默認是gbk編碼的

 

所以在windows 下 wchar_t 轉 char也就是編碼轉化

 

直接貼出wchar_t *字符串和char *字符串的集中互轉方法

方法一:利用Windows的宏W2A,A2W

 

 

	USES_CONVERSION;
	char* test1 = W2A(L"我是寬字節");//轉化成默認
	wchar_t* test12 = A2W("我是窄字節");



 

方法二:利用Windows里的ATL里面的類CW2A和CA2W,在轉換時候還可以順便調整編碼,不加第二個參數就是保持GBK不變

 

	std::string test3 = CW2A(L"中文字符", CP_UTF8);//一般可以加一下第二個參數,順便切換編碼
	std::wstring test4 = CA2W("中文字符");//一般不用加第二個參數



 

方法三:利用Windows API中的函數 WideCharToMultiByte 和 MultiByteToWideChar ,而且也是可以帶自定義編碼轉換

以下函數用法: CharToWchar可以等效於CW2A,WcharToChar可以等效於CA2W

 

std::wstring CharToWchar(const char* c, size_t m_encode = CP_ACP) { std::wstring str; int len = MultiByteToWideChar(m_encode, 0, c, strlen(c), NULL, 0); wchar_t* m_wchar = new wchar_t[len + 1]; MultiByteToWideChar(m_encode, 0, c, strlen(c), m_wchar, len); m_wchar[len] = '\0'; str = m_wchar; delete m_wchar; return str; } std::string WcharToChar(const wchar_t* wp, size_t m_encode = CP_ACP) { std::string str; int len = WideCharToMultiByte(m_encode, 0, wp, wcslen(wp), NULL, 0, NULL, NULL); char *m_char = new char[len + 1]; WideCharToMultiByte(m_encode, 0, wp, wcslen(wp), m_char, len, NULL, NULL); m_char[len] = '\0'; str = m_char; delete m_char; return str; }



方法四:將使用標准C的mbstowcs方法和wcstombs方法,且配合標准C的setlocale方法,這也是利用標准庫跨平台的做法,

 

但是過程沒法直接轉成自定義的編碼,需要額外轉碼。所以在Windows平台開發的話不推薦。

注意:方法四將留在后面的blog和iconv庫一起作為筆記

 

https://blog.csdn.net/lightspear/article/details/54695123


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM