程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 深刻懂得c++中char*與wchar_t*與string和wstring之間的互相轉換

深刻懂得c++中char*與wchar_t*與string和wstring之間的互相轉換

編輯:關於C++

深刻懂得c++中char*與wchar_t*與string和wstring之間的互相轉換。本站提示廣大學習愛好者:(深刻懂得c++中char*與wchar_t*與string和wstring之間的互相轉換)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻懂得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()函數來停止轉換,事理一樣.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved