<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    深入理解c++中char*與wchar_t*與string以及wstring之間的相互轉換

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    本篇文章是對c++中的char*與wchar_t*與string以及wstring之間的相互轉換進行了詳細的分析介紹,需要的朋友參考下
    -
    復制代碼 代碼如下:
        #ifndef USE_H_ 
        #define USE_H_ 

        #include <iostream> 
        #include <windows.h> 
        #include <string> 
        using namespace std; 
        class CUser 
        { 
        public: 
            CUser(); 
            virtual~ CUser(); 
            char* WcharToChar(const wchar_t* wp); 
            char* StringToChar(const string& s); 
            char* WstringToChar(const wstring& ws); 
            wchar_t* CharToWchar(const char* c); 
            wchar_t* WstringToWchar(const wstring& ws); 
            wchar_t* StringToWchar(const string& s); 
            wstring StringToWstring(const string& s); 
            string WstringToString(const wstring& ws); 
            void Release(); 
        private: 
            char* m_char; 
            wchar_t* m_wchar; 
        }; 
        #endif; 

    復制代碼 代碼如下:
        #include "stdafx.h" 
        #include "use.h" 
        CUser::CUser() 
        :m_char(NULL) 
        ,m_wchar(NULL) 
        { 
        } 
        CUser::~CUser() 
        { 
            Release(); 
        } 
        char* CUser::WcharToChar(const wchar_t* wp) 
        { 
            Release(); 
            int len= WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),NULL,0,NULL,NULL); 
            m_char=new char[len+1]; 
            WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),m_char,len,NULL,NULL); 
            m_char[len]='\0'; 
            return m_char; 
        } 
        wchar_t* CUser::CharToWchar(const char* c) 
        { 
            Release(); 
            int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0); 
            m_wchar=new wchar_t[len+1]; 
            MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len); 
            m_wchar[len]='\0'; 
            return m_wchar; 
        } 
        void CUser::Release() 
        { 
            if(m_char) 
            { 
                delete m_char; 
                m_char=NULL; 
            } 
            if(m_wchar) 
            { 
                delete m_wchar; 
                m_wchar=NULL; 
            } 
        } 
        char* CUser::StringToChar(const string& s) 
        { 
            return const_cast<char*>(s.c_str()); 
        } 
        char* CUser::WstringToChar(const std::wstring &ws) 
        { 
            const wchar_t* wp=ws.c_str(); 
            return WcharToChar(wp); 
        } 
        wchar_t* CUser::WstringToWchar(const std::wstring &ws) 
        { 
            return const_cast<wchar_t*>(ws.c_str()); 
        } 
        wchar_t* CUser::StringToWchar(const string& s) 
        { 
            const char* p=s.c_str(); 
            return CharToWchar(p); 
        } 
        string CUser::WstringToString(const std::wstring &ws) 
        { 
            string s; 
            char* p=WstringToChar(ws); 
            s.append(p); 
            return s; 
        } 
        wstring CUser::StringToWstring(const std::string &s) 
        { 
            wstring ws; 
            wchar_t* wp=StringToWchar(s); 
            ws.append(wp); 
            return ws; 
        } 

    如果涉及到CString,可以利用CString::GetBuffer()函數來進行轉換,道理一樣.

    詳細出處參考:http://www.jb51.net/article/37627.htm

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全