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

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

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

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

  2. C#中String 与Color之间的相互转换

    C#中String 与Color之间的相互转换 ————————————宋兴柱     其实,我们平常如果要在数据库存放Color类型值的话,肯定会在数据库中建立varchar类型.对吧.但是Colo ...

  3. JavaScriptES6中Map与对象、数组,JSON之间的相互转换

    JavaScriptES6中Map与对象.数组,JSON之间的相互转换 https://blog.csdn.net/c__dreamer/article/details/82183130

  4. C++中char*与wchar_t*之间的转换

    http://blog.163.com/tianshi_17th/blog/static/4856418920085209414977/ 关于C++中的char*与wchar_t*这两种类型的相互转换 ...

  5. c++中char*\wchar_t*\string\wstring之间的相互转换

    string U2A(const wstring& str)//Unicode字符转Ascii字符 { string strDes; if ( str.empty() ) goto __end ...

  6. 数据库中char、varchar、varchar2、nvarchar之间的关系

    符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时 ...

  7. C#中 char、byte、string

    var str = "我是中国人";var str1 = "abc"; char[] chars = str.ToCharArray();char[] char ...

  8. 理解css中min-width和max-width,width与它们之间的区别联系

    css中,min-width是用来限制元素的最小宽度,max-width用来限制元素的最大宽度,也就是说当元素的width大于max-width,或者小于min-width.就被它们的值所代替,尤其适 ...

  9. wchar_t char string wstring 之间的转换

    wchar_t char string wstring 之间的转换 转:http://blog.csdn.net/lbd2008/article/details/8333583 在处理中文时有时需要进 ...

随机推荐

  1. setTimeout用法

    function faceSave() {                                    if(confirm("确定保存?"))              ...

  2. jFinal中报对应模型不存在的错误(The Table mapping of model: demo.User not exists)

    jFinal中报对应模型不存在的错误(The Table mapping of model: demo.User not exists) 贴出错误: java.lang.RuntimeExceptio ...

  3. 删除SVN批处理(bat)

    添加批处理文件(deleteSVN.bat),文件内容: @echo off :start ::启动过程,切换目录 set pwd=%cd% cd %1 echo 工作目录是:& chdir ...

  4. [译]JavaScript检测浏览器前缀

    原文地址: Detect Vendor Prefix with JavaScript 不管浏览器私有前缀的现状如何,我们还是要与之为伴,并且有时候还需要利用它来做一些事情.这些前缀可以用于CSS(比如 ...

  5. javascript笔记—— call 简单理解

    call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN ...

  6. spring中jdbc的配置

    本文中的JdbcTemplate的用法可以参看官方文档http://docs.spring.io/spring/docs/3.2.5.RELEASE/spring-framework-referenc ...

  7. [Guava学习笔记]Collections: 不可变集合, 新集合类型

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3843386.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  8. 仿360手机卫士界面效果android版源码

    仿360手机卫士界面效果android版,这个今天一大早在源码天堂的那个网站上看到了一个那个网站最新更新的一个源码,所以就分享给大学习一下吧,布局还挺不错的,而且也很简单的,我就不把我修改的那个分享出 ...

  9. 使用ckplayer搭建rtmp视频直播应用

    视频直播才有的是RTMP协议进行视频实时流传输,在这里我们用到的软件都是 adobe 公司的一个是:Flash Media Server4 另一个是flash media live encoder 这 ...

  10. 【转】DataGridView显示行号

    ref:http://blog.csdn.net/xieyufei/article/details/9769631 方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件 ...