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

简介: 本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下-复制代码 代码如下:    #ifndef USE_H_      #define USE_H_      #include       #include   ...

本篇文章是对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

目录
相关文章
|
4月前
|
C++
C++ string中的函数和常用用法
C++ 中string中的函数和常用用法
37 4
|
5月前
|
安全 算法 C语言
【C++进阶】深入STL之string:掌握高效字符串处理的关键
【C++进阶】深入STL之string:掌握高效字符串处理的关键
57 1
【C++进阶】深入STL之string:掌握高效字符串处理的关键
|
5月前
|
安全 C++
C++一分钟之-字符串处理:std::string
【6月更文挑战第25天】`std::string`是C++文本处理的核心,存在于`&lt;string&gt;`库中。它支持初始化、访问、连接、查找、替换等操作。常见问题包括空指针解引用、越界访问和不当内存管理。要安全使用,确保字符串初始化,用`at()`检查边界,用`.empty()`检查空字符串,且无需手动释放内存。高效技巧包括预先分配内存、利用互转函数以及使用迭代器。记得正确比较和遍历字符串以保证代码效率和安全性。
70 5
|
5月前
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
|
5月前
|
C语言 C++
C++对C的改进和拓展\string类型
C++对C的改进和拓展\string类型
29 1
|
5月前
|
编译器 C++
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
37 1
new String()定义字符串为空,char[] chs = {‘a‘,‘b‘,‘c‘} String s2 = new String(chs) 输出abc,byte定99为a
new String()定义字符串为空,char[] chs = {‘a‘,‘b‘,‘c‘} String s2 = new String(chs) 输出abc,byte定99为a
|
4月前
|
C++
C++】string类的使用③(修改器Modifiers)
这篇博客探讨了C++ STL中`string`类的修改器和非成员函数重载。文章介绍了`operator+=`用于在字符串末尾追加内容,并展示了不同重载形式。`append`函数提供了更多追加选项,包括子串、字符数组、单个字符等。`push_back`和`pop_back`分别用于在末尾添加和移除一个字符。`assign`用于替换字符串内容,而`insert`允许在任意位置插入字符串或字符。最后,`erase`函数用于删除字符串中的部分内容。每个函数都配以代码示例和说明。
|
4月前
|
C++ 索引 容器
|
4月前
|
存储 算法 程序员