深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换

所属分类: 软件编程 / C 语言 阅读数: 100
收藏 0 赞 0 分享
复制代码 代码如下:

    #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()函数来进行转换,道理一样.
更多精彩内容其他人还在看

从汇编看c++中变量类型的深入分析

本篇文章是对c++中的变量类型进行了详细的分析介绍。需要的朋友参考下
收藏 0 赞 0 分享

从汇编看c++的默认析构函数的使用详解

本篇文章是对c++中默认析构函数的使用进行了详细的分析介绍。需要的朋友参考下
收藏 0 赞 0 分享

基于c++中的默认拷贝函数的使用详解

本篇文章对c++中默认拷贝函数的使用进行了详细的分析介绍。需要的朋友参考下
收藏 0 赞 0 分享

解析c++中的默认operator=操作的详解

本篇文章是对c++中的默认operator=操作的应用进行了详细的分析介绍。需要的朋友参考下
收藏 0 赞 0 分享

解析c++中参数对象与局部对象的析构顺序的详解

本篇文章是对c++中参数对象与局部对象的析构顺序进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

深入c++中临时对象的析构时机的详解

本篇文章对c++中临时对象的析构时机进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

解析内存对齐 Data alignment: Straighten up and fly right的详解

对于所有直接操作内存的程序员来说,数据对齐都是很重要的问题.数据对齐对你的程序的表现甚至能否正常运行都会产生影响
收藏 0 赞 0 分享

深入内存对齐的详解

本篇文章是对内存对齐进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

深入C语言把文件读入字符串以及将字符串写入文件的解决方法

本篇文章是对C语言把文件读入字符串以及将字符串写入文件的方法进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

深入Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)的详解

本篇文章对Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享
查看更多