• char*,wchar_t*,CString和BSTR之间的转换


    前言

    本文并不尝试列举出所有的转换方法,只列举作者认为方便易用的方法。

    1.char*和wchar_t*的相互转换

    可以利用中间类_bstr_t(头文件comdef.h)方便的进行相互转换

    const wchar_t* wText = (_bstr_t)"测试";
    char* cText = (_bstr_t)L"测试";

     可以通过A2T,A2W,T2A,T2W等宏来进行转换

    char* cText = "测试";
    USES_CONVERSION;
    wchar_t wText = A2W(cText);

    其中USES_CONVERSION;用来初始化某些局部变量,至于为什么单独用一个宏来进行变量初始化,http://blog.csdn.net/wuji0447/article/details/4659001中进行了详细说明。

    另外因为这些是宏,所以使用的时候要小心,见http://www.cnblogs.com/rainbowzc/archive/2009/09/07/1562168.html

    2.char*转CString

    注意:CString的内部实现与项目属性页的Charactor Set配置有关,所以其配置直接影响其与char*或wchar_t*相互转换的方式。

    我们可以直接用char*构造CString来将char*转为CString。

    在Charactor Set配置项not set的情况下,可以直接用char*构造CString或将char*赋值给CString。在Charactor Set配置项为UNICODE的情况下,可以将之转换为wchar_t*再赋值给CString。

    3.CString转char*

    在Charactor Set配置项not set的情况下,可以直接通过GetBuffer函数将CString转为char*

    CString a("测试");
    char* cText = a.GetBuffer();

    需要注意的是如果我们对cText的内容进行了操作后要想再使用a,则需调用a.ReleaseBuffer()来释放缓存。

    4.wchar_t*和CString的相互转换

    参见2,3

    5.char*, wchar_t*转BSTR

    都可利用中间类_bstr_t来转

    char* cText = "测试";
    BSTR bstr1 = (_bstr_t)cText;
    
    wchar_t* wText = L"测试";
    BSTR bstr2 = (_bstr_t)wText;

    可使用SysAllocString等函数转。

    复制代码
    BSTR bText1 = ::SysAllocString(L"测试");
    BSTR bText2 = ::SysAllocStringLen(L"测试",2);
    。。。
    // 用完释放
    SysFreeString(bText1); 
    SysFreeString(bText2);
    复制代码

    6.BSTR转char*, wchar_t*

    都可利用中间类_bstr_t来转

    7.CString转BSTR

    CString a(L"测试");
    BSTR bstr = a.AllocSysString();
    SysFreeString(bstr); // 用完释放

    8.BSTR转CString

    BSTR可通过直接构造或赋值给CString来转换为CString

    BSTR bstr = (_bstr_t)cText;
    CString a = bstr;


    作者:Jingle Guo
    出处:http://www.cnblogs.com/studynote/
    若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
     
    分类: C++
  • 相关阅读:
    20145321 《Java程序设计》课程总结
    20145321 实验五实验报告
    20145321 《Java程序设计》第10周学习总结
    20145321 《Java程序设计》第9周学习总结
    20145321 实验四实验报告
    20145321 实验三实验报告
    20145321 《Java程序设计》第8周学习总结
    20145321 《Java程序设计》第7周学习总结
    20145321 实验二实验报告
    20145319 《信息安全系统设计基础》课程总结
  • 原文地址:https://www.cnblogs.com/2018shawn/p/9112101.html
Copyright © 2020-2023  润新知