zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    CentOS安装 Docker
    检测zookeeper和kafka是否正常
    开机自启动redis
    java学习笔记14--多线程编程基础1
    java学习笔记13--反射机制与动态代理
    JobControl 的实现原理
    Hadoop中Partition深度解析
    Mapper 与 Reducer 解析
    hadoop中OutputFormat 接口的设计与实现
    hadoop中InputFormat 接口的设计与实现
  • 原文地址:https://www.cnblogs.com/studynote/p/3956423.html
Copyright © 2011-2022 走看看