常见类型转换

原创 2007年09月22日 15:17:00

一.CString与LPCWSTR 

    两者的不同:LPCWSTR 是Unicode字符串指针,初始化时串有多大,申请空间就有多大,以后存贮若超过则出现无法预料的结果,这是它与CString的不同之处。而CString是一个串类,内存空间类会自动管理。

    CString转换成LPCWSTR

    方法一:CString strFileName;

                     LPCWSTR lpcwStr = strFileName.AllocSysString();

    方法二:CString str=_T("TestStr");
                    USES_CONVERSION;
                    LPCWSTR lpcwStr = A2CW((LPCSTR)str);

    MFC中CString和LPSTR是可以通用,其中A2CW表示(LPCSTR)  -> (LPCWSTR),USER_CONVERSION表示用来定义一些中间变量,在使用ATL的转换宏之前必须定义该语句。

    LPCWSTR转换成CString

    LPCWSTR lpcwStr = L"TestWStr";
    CString str(lpcwStr);

二.CString与LPSTR转换

     CString转换成LPSTR:

    方法一:CString strFileName;

                    LPSTR lpStr = strFileName.GetBuffer();

                    strFileName.ReleaseBuffer();

     方法二:CString strFileName;

                     LPSTR lpStr = (LPSTR)(LPCSTR)strFimeName;

      LPSTR转换成CString:

                      LPSTR lpStr = L"TestStr";
                      CString str(lpStr);

      注意:CString和LPCSTR可直接转换,如下:

                     CString str;

                     LPCSTR lpcStr = (LPCSTR)str;

三.CString和char*转换
       CString转换成char*
       方法一:CString str;
                       char* p = str.GetBuffer();
       方法二:CString str;
                       char* p = (LPSTR)(LPCSTR)str;
       char*转换成CString
                       char* p = "test";
                       CString str = ("%s",p);

四.String和int、float的转换

        可以使用atoi,atof,atol等函数来完成。

五.LPSTR(char*)和LPWSTR的转换

        可以使用下面的ATL宏来进行,最好是将变量定义成TCHAR、LPTSTR等T类型,可以避免转换。

ATL宏介绍:

     A2BSTR   OLE2A             T2A            W2A
     A2COLE   OLE2BSTR    T2BSTR    W2BSTR
     A2CT         OLE2CA         T2CA          W2CA
     A2CW        OLE2CT         T2COLE    W2COLE
     A2OLE       OLE2CW       T2CW         W2CT
     A2T            OLE2T            T2OLE        W2OLE
     A2W           OLE2W          T2W             W2T

    A :ANSI 字符串,也就是 MBCS。
    W、OLE 宽字符串,也就是 UNICODE。
    T 中间类型T。如果定义了 _UNICODE,则T表示W;如果定义了 _MBCS,则T表示A
    C const 的缩写

利用这些宏,可以快速的进行各种字符间的转换。使用前必须包含头文件,并且申明USER_CONVERSION;使用 ATL 转换宏,由于不用释放临时空间,所以使用起来非常方便。但是考虑到栈空间的尺寸(VC 默认2M),使用时要注意几点:

    1、只适合于进行短字符串的转换;
    2、不要试图在一个次数比较多的循环体内进行转换;
    3、不要试图对字符型文件内容进行转换,因为文件尺寸一般情况下是比较大的;
    4、对情况 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();

 

void Func1(LPSTR lpStr);

void Func2(LPWSTR lpwStr);

TCHAR   name[256];

TCHAR*   pName = new  TCHAR[256];

Func1(name); // Func1(pName);

Func2(name); // Func2(pName);

 

注意在VS2005中上面用红色标记的代码已经不成立。

VS2005中CString已经改为宽字符型,一些转换如下:

char name[10];
 TCHAR sex[5] ;
 char *p = name;
 TCHAR *pw = sex;

 LPSTR lpstr = name;
 LPCSTR lpcstr = name;
 lpcstr = lpstr;
 
 lpstr = p;
 p = (char*)sex;
 pw = (WCHAR*)name;
 LPWSTR lpwstr = (LPWSTR)lpstr;
 lpwstr = (LPWSTR)lpcstr;
 LPCWSTR lpcwstr = (LPCWSTR)lpstr;
 lpcwstr = (LPCWSTR)name;

 CString str(lpstr);
 CString str1(lpcstr);
 CString str2(lpwstr);
 CString str3(lpcwstr);
 CString str4(name);
 CString str5(sex);

 lpwstr = (LPWSTR)(LPCWSTR)str;
 lpstr = (LPSTR)(LPCWSTR)str;
 lpcstr = (LPCSTR)(LPCWSTR)str;

 p = (char*)str.GetBuffer();
 pw = str.GetBuffer();

可以看出转换更加简单了,基本上可以直接转换,A2W等宏基本上不需要啦。

C/C++各种数据类型转换汇总

C/C++各种数据类型转换汇总!
  • fengbingchun
  • fengbingchun
  • 2015年10月25日 16:20
  • 2207

C#数据类型转换的几种形式

1、Convert.ToInt32(); //转换成32位的整数。 2、变量.ToString();/最常见的转换成 字符串。 3、"订单"+2514 //后面的数字会转换为字符串。 4、((类...
  • chenyiming_1990
  • chenyiming_1990
  • 2013年07月09日 01:12
  • 5708

c++中char与string之间的相互转换问题

c++中char型和string型的相互转换问题
  • songjunyan
  • songjunyan
  • 2014年02月26日 09:14
  • 2478

VC常见数据类型转换详解

  • 2008年11月01日 21:40
  • 27KB
  • 下载

C++常见类型转换

  • 2013年04月18日 10:32
  • 61KB
  • 下载

python 常见面试问题(3)-单例模式/lambda函数/类型转换/文件操作/查询和替换/Fibonacci数列

1:Python如何实现单例模式? 单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类 显然单例模式的要点有三个;一是某个类...
  • julius_lee
  • julius_lee
  • 2012年12月14日 17:24
  • 1265

MFC——常见的几种类型转换(CString、Int、Char、string)

* 从昨天开始打算做一个学习点云的构件,点云操作平台选择了MFC,但是在往MFC框架中添加功能的时候常常需要进行一些数据类型的转换,网上也有不少资料,但是感觉有些不够全面且不能一目了然地呈现给读...
  • GoodLi199309
  • GoodLi199309
  • 2017年06月29日 16:49
  • 418

VC常见数据类型转换详解

刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。  我们先定义一些常见类型变量借以说明  int i = 100;  long l = 200...
  • nodeman
  • nodeman
  • 2015年02月05日 16:15
  • 237

C++中int、string等常见类型转换

我不生产自己不熟悉的内容,我只是陌生内容的搬运工!向原作致敬! 初学C++,总结下在实践中对于几种常见内置类型转换的理解吧。   1、int型与string型的互相转换 最...
  • jzwong
  • jzwong
  • 2015年12月27日 12:02
  • 306

C++中string、int常见类型转换(含代码演示)

刚才转载了别人的一篇有关string、int类型转换的博文,现在我想根据被人写的自己写代码验证一下。今天做codeforces的时候也用到了类型转换,一会再写一下关于那个codeforces的总结。 ...
  • jzwong
  • jzwong
  • 2015年12月27日 12:56
  • 279
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:常见类型转换
举报原因:
原因补充:

(最多只允许输入30个字)