日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ WINDOWS下 wchar_t *和char * 相互转化总结篇

發布時間:2025/3/15 c/c++ 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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庫一起作為筆記

總結

以上是生活随笔為你收集整理的C++ WINDOWS下 wchar_t *和char * 相互转化总结篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。