关闭

vc++中类型转化

60人阅读 评论(0) 收藏 举报

在开发中经常会遇到类型不匹配的问题,这里在网上搜集了些资料做了整理,以便以后使用,在不断更新中。。。

1、string to CString

CString str.format("%s",string.c_str()); 

2、CString to string

string str(CString.GetBuffer(str.GetLength()));

string str=(LPCTSTR)CString;

3、string to char *

char *p=string.c_str();

4、char * to string

string str(char*);

5 、CString与char*相互转换举例

CString strValue(“Hello”);

char *szValue;

szValue=strValue.GetBuffer(szValue);

也可用(LPSTR)(LPCTSTR)对CString//  进行强制转换. 

szValue=(LPSTR)(LPCTSTR)strValue;

反过来可直接赋值:

char *szChar=NULL;

CString strValue;

szChar=new char[10];

memset(szChar,0,10);

strcpy(szChar,”Hello”);

strValue=szChar;

6、const char* to char*
const char* y="1111";
char   *p  =   new   char[strlen(y)+1]; 
strcpy(p,y);

7、string to const char*
string s="strte";
const char* r=s.c_str();

8、char* to string
string s(char *); 

9、CString  to 数学类型

eg:CString str="123"; int i;double d;long l;

i=atoi(str);

d=atof(str);

l=atol(str);
10、数学类型to CString

 可用Format函数,举例:

CString s;

int i = 64;

s.Format("%d", i)

11、CString 与 BSTR 型转换

CString 型转化成 BSTR 型

当我们使用 ActiveX 控件编程时,经常需要用到将某个值表示成 BSTR 类型.BSTR 是一种记数字符串,Intel平台上的宽字符串(Unicode),并且可以包含嵌入的 NULL 字符。

可以调用 CString 对象的 AllocSysString 方法将 CString 转化成 BSTR:

CString str;

str = .....; // whatever

BSTR bStr = str.AllocSysString();

 

BSTR型转换为CString

如果你在 UNICODE 模式下编译代码,你可以简单地写成:

CString convert(BSTR bStr)

{

    if(bStr == NULL)

        return CString(_T(""));

    CString s(bStr); // in UNICODE mode

    return s;

}

如果是 ANSI 模式

CString convert(BSTR b)

{

    CString s;

    if(b == NULL)

       return s; // empty for NULL BSTR

#ifdef UNICODE

    s = b;

#else

    LPSTR p = s.GetBuffer(SysStringLen(b) + 1);

    ::WideCharToMultiByte(CP_ACP,            // ANSI Code Page

                          0,                 // no flags

                          b,                 // source widechar string

                          -1,                // assume NUL-terminated

                          p,                 // target buffer

                          SysStringLen(b)+1, // target buffer length

                          NULL,              // use system default char

                          NULL);             // don''t care if default used

    s.ReleaseBuffer();

#endif

    return s;

}

12、VARIANT 型转化成 CString 型

VARIANT 类型经常用来给 COM 对象传递参数,或者接收从 COM 对象返回的值。你也能自己编写返回 VARIANT 类型的方法,函数返回什么类型 依赖可能(并且常常)方法的输入参数(比如,在自动化操作中,依赖与你调用哪个方法。IDispatch::Invoke 可能返回(通过其一个参数)一个 包含有BYTE、WORD、float、double、date、BSTR 等等 VARIANT 类型的结果,(详见 MSDN 上的 VARIANT 结构的定义)。

CString VariantToString(VARIANT * va)

{

    CString s;

    switch(va->vt)

      { /* vt */

       case VT_BSTR:

          return CString(vaData->bstrVal);

       case VT_BSTR | VT_BYREF:

          return CString(*vaData->pbstrVal);

       case VT_I4:

          s.Format(_T("%d"), va->lVal);

          return s;

       case VT_I4 | VT_BYREF:

          s.Format(_T("%d"), *va->plVal);

       case VT_R8:

          s.Format(_T("%f"), va->dblVal);

          return s;

       //剩下的类型转换由读者自己完成

       default:

          ASSERT(FALSE); // unknown VARIANT type (this ASSERT is optional)

          return CString("");

      } /* vt */

}

13、VARIANT变量的使用

VARIANT va;

int a=123;

va.vt=VT_I4;///指明整型数据

va.lVal=a; ///赋值

14、BSTR、_bstr_t与CComBSTR

CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。

char *转换到BSTR可以这样:

BSTR s=_com_util::ConvertStringToBSTR("数据");///使用前需要加上头文件comutil.h

反之  char *p=_com_util::ConvertBSTRToString(s);

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:94次
    • 积分:20
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档