zoukankan      html  css  js  c++  java
  • 深入理解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]=''; 
            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]=''; 
            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

  • 相关阅读:
    数据库之case when + group by 联合使用
    JAVA之JSON对象解析
    oracle导入表数据时遇到外键约束问题导致导入失败
    Oracle之会话阻塞
    cmd的操作命令导出导入.dmp文件
    性能优化理解
    JS原型与原型链的理解
    Promise实现原理
    Js运行机制Event Loop
    JS循环中断与异步for...in forEach map
  • 原文地址:https://www.cnblogs.com/lidabo/p/3564336.html
Copyright © 2011-2022 走看看