CString_与其他类型的转换
VC 中类型转换(CString,TCHAR,string)
AfxMessageBox(buf);
delete(buf);
_bstr_t变量
_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用
_bstr_t bstrVar("test");
const char *buf = bstrVar;///不要修改buf中的内容
AfxMessageBox(buf);
buffer = _fcvt( source, 7, &decimal, &sign );
运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0
decimal表示小数点的位置,sign表示符号:0为正数,1为负数
CString变量
VARIANT va;
int a=2001;
va.vt=VT_I4;///指明整型数据
va.lVal=a; ///赋值
_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
使用时需加上#include <comdef.h>
例如:
long l=222;
特别是_bstr_t,建议大家使用它。
CString_与其他类型的转换
一.VC常用数据类型列表二.常用数据类型转化2.1数学类型变量与字符串相互转换_ttoi(CString->int) _tstof(CString->double)2.2CString及string,char *与其他数据类型的转换和操作●CString,string,char*的综合比较●数学类型与CString相互转化●CString与char*相互转换举例●CString 与 BSTR 型转换●VARIANT 型转化成 CString 型2.3 BSTR、_bstr_t与CComBSTR2.4 VARIANT 、_variant_t 与 COleVariant附录CString及字符串转及操作详解参考书籍:CSDN,<<MFC深入浅出(Second Edit)>> 一.VC常用数据类型列表int iTyep=3;char *szChar;itoa(iType,szChar,2);cout<<szChar;//输出为1010类似函数列表:_CRTIMP char * __cdecl _itoa(int, char *, int);//为了完整性,也列在其中_CRTIMP char * __cdecl _ultoa(unsigned long, char *, int);_CRTIMP char * __cdecl _ltoa(long, char *, int);_CRTIMP char * __cdecl _i64toa(__int64, char *, int);_CRTIMP char * __cdecl _ui64toa(unsigned __int6 4, char *, int);_CRTIMP wchar_t * __cdecl _i64tow(__int64, wchar_t *, int);_CRTIMP wchar_t * __cdecl _ui64tow(unsigned __int64, wchar_t *, int);_CRTIMP wchar_t * __cdecl _itow (int, wc har_t *, int);//转换为长字符串类型_CRTIMP wchar_t * __cdecl _ltow (long, wchar_t *, int);_CR TIMP wchar_t * __cdecl _ultow (unsigned long, wchar_t *, int);还有很多,请自行研究(2)将字符串类型转换为数学类型变量可以用以下一些函数:举例: _CRTIMP int __cdecl atoi(co nst char *);//参数一看就很明了char *szChar=”88”;int temp(0);temp=atoi(szChar); cout<<temp;类似的函数列表:_CRTIMP int __cdecl atoi(const char *);_CRTIMP double __cd ecl atof(const char *);_CRTIMP long __cdecl atol(const char *);_CRTIMP long double __cdecl _atold(const char *);_CRTIMP __int64 __cdecl _atoi64(const char *);_CRTIMP double __cdecl s trtod(const char *, char **);//_CRTIMP long __cdecl strtol(const char *, char **, int);//_ CRTIMP long double __cdecl _strtold(const char *, char **);_CRTIMP unsigned long __cdecl str toul(const char *, char **, int);_CRTIMP double __cdecl wcstod(const wchar_t *, wchar_t **); //长字符串类型转换为数学类型_CRTIMP long __cdecl wcstol(const wchar_t *, wchar_t **, int); _CRTIMP unsigned long __cdecl wcstoul(const wchar_t *, wchar_t **, int);_CRTIMP int __cdecl _wtoi(const wchar_t *);_CRTIMP long __cdecl _wtol(const wchar_t *);_CRTIMP __int64 __cdecl _wtoi64(const wchar_t *);还有很多,请自行研究2.2.CString及string,char *与其他数据类型的转换和操作(1)CString,string,char*的综合比较(这部分CSDN上的作者joise的文章<< CString,string,char*的综合比较>>写的很详细,请大家在仔细阅读他的文章.地址: /joise/或参考附录:(2)转换:●数学类型与CString相互转化数学类型转化为CString可用Format函数,举例:CString s;int i = 64;s.Format("%d", i)CString转换为数学类型:举例CString strValue("1.234");double dblValue;dblValue = atof((LPCTSTR)strValue);●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;●CString 与 BSTR 型转换CString 型转化成 BSTR 型当我们使用 ActiveX 控件编程时,经常需要用到将某个值表示成 BSTR 类型.B STR 是一种记数字符串,Intel平台上的宽字符串(Unicode),并且可以包含嵌入的 NULL 字符。
CString, QString, char之间的转换
will make the application crash as the QByteArray has not been stored and hence no longer exists.
To convert a char* to a QString you can use the QString constructor that takes a QLatin1String, e.g:
const char *c_str2 = ba.data();
printf("str2: %s", c_str2);
return app.exec();
}
Note that it is necessary to store the bytearray before you call data() on it, a call like the following
CString, QString, char*之间的转换
传给未分配内存的const char* (LPCTSTR)指针.
CString cstr(asdd);
const char* ch = (LPCTSTR)cstr;
ch指向的地址和cstr相同。但由于使用const保证ch不会修改,所以安全.2.传给未分配内存的指针.
operator const char * () const
可以这样
printf("%s\n", (const char*) cstr);
或是copy出来
char buf[1024];
strcpy(buf, (const char*) cstr);
CString,string,char数组的转换
CString,string,char数组的转换原⽂地址:博客,感谢原作者。
//----------------ANSI字符串转换为UNICODE字符串----------------------//// 待转换的数组char szDCBparam[50] = {'0','1','\0'};// 计算需要的缓冲区⼤⼩DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, szDCBparam, -1, NULL, 0);// 分配存放转换后数据的缓冲区wchar_t *pwText = new wchar_t[dwNum];// 转换后的数据存放在pwText所指向的空间if (!MultiByteToWideChar (CP_ACP, 0, szDCBparam, -1, pwText, dwNum)){return;}// 注: 如果是char型数组转CString,直接使⽤CString szTest = CString(szDCBparam);//----------------UNICODE字符串转换为ANSI字符串----------------------// //----------------将CString转为char型数组----------------------------// // 待转换的数据CString szErrorInfo = _T("this is a test string!");// 保存错误信息的ANSI字符串的缓冲区,注意,缓冲区要⾜够⼤char InfoString[100];// 转换后的数据存放在InfoString数组中if (!WideCharToMultiByte(CP_ACP,0,LPCTSTR(szErrorInfo),-1,InfoString,100,NULL,NULL)){return;}//----------------将CString转为string----------------------//CString cstr = _T("test");std::string str = (CStringA)cstr;// 注意,在vs2008下,使⽤std::string temp = cstr.GetBuffer(0)不⾏。
MFC---类型之转换
1、CString to char*经过类型强制转换,可以将CString类型转换成char*,例如:CString cStr = "Hello,world!";char* zStr = (char*)(LPCTSTR)cStr;2、char* to CStringchar*类型可以直接给CString,完成自动转换,例如:char* zStr = "Hello,world!";CString cStr = zStr;3、CString to LPCSTR将CString转换成LPCSTR,需要获得CString的长度,例如:CString cStr = _T("Hello,world!");int nLen = cStr.GetLength();LPCSTR lpszBuf = cStr.GetBuffer(nLen);4、CString to LPSTR这个和第3个技巧是一样的,例如:CString cStr = _T("Hello,world!");int nLen = str.GetLength();LPSTR lpszBuf = str.GetBuffer(nLen);5、Char[] to int将字符串类型转换成整数型,可以使用atoi函数,例如:char c[10];int n;n = atoi©;6、Char[] to float和第5个技巧一样,使用atof()函数可以转换成float型,例如:char c[10];float f;f = atof©;7、Char* to int和第5个技巧完全一样,例如:char *str = "100";int i;i = atoi(str);一、其它数据类型转换为字符串短整型(int)itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制itoa(i,temp,2); ///按二进制方式转换长整型(long)ltoa(l,temp,10);二、从其它包含字符串的变量中获取指向该字符串的指针CString变量str = "2008北京奥运";buf = (LPSTR)(LPCTSTR)str;BSTR类型的_variant_t变量v1 = (_bstr_t)"程序员";buf = _com_util::ConvertBSTRToString((_bstr_t)v1);三、字符串转换为其它数据类型strcpy(temp,"123");短整型(int)i = atoi(temp);长整型(long)l = atol(temp);浮点(double)d = atof(temp);四、其它数据类型转换到CString使用CString的成员函数Format来转换,例如:整数(int)str.Format("%d",i);浮点数(float)str.Format("%f",i);字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值str = username;五、BSTR、_bstr_t与CComBSTRCComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。
vcCString,int,string等类型转换
VC CString,int,string,char*之间的转换标签:VC string int char CString原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。
否则将追究法律责任。
/539048/114304搜集,有点乱1 CString,int,string,char*之间的转换string 转 CStringCString.format("%s", string.c_str());char 转 CStringCString.format("%s", char*);char 转 stringstring s(char *);string 转 char *char *p = string.c_str();CString 转 stringstring s(CString.GetBuffer());1,string -> CStringCString.format("%s", string.c_str());用c_str()确实比data()要好.2,char -> stringstring s(char *);你的只能初始化,在不是初始化的地方最好还是用assign().3,CString -> stringstring s(CString.GetBuffer());GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.《C++标准函数库》中说的有三个函数可以将字符串的内容转换为字符数组和C—string1.data(),返回没有”\0“的字符串数组2,c_str(),返回有”\0“的字符串数组3,copy()CString互转int将字符转换为整数,可以使用atoi、_atoi64或atol。
而将数字转换为CString变量,可以使用CString的Format函数。
MFC常见数据类型转换
1.CTime--〉CStringCTime t;t=CTime::GetCurrentTime();CString sur;sur.Format("%s",t.Format("%Y-%m-%d")); MessageBox(sur);2.long --> CStringlong a ;CString b;b.format("%ld",a);3.double --->CStringdouble a;CString b;b.format("%f",a);4.CString--〉CTimeCString sur;sur="2006-08-09";COleDateTime time1;time1.ParseDateTime(sur);SYSTEMTIME systime; VariantTimeToSystemTime(time1, &systime); CTime tm(systime);m_time=tm;UpdateData(false);5.CString和int,float之间的转换。
5.1 int <->CString1) int ->CStringint n = 1;str.Format("%d",n);2) CString->intCString str = "1";int n = _ttoi(str);5.2 char* 与CString1)char*->CStringchar sz[128];CString str;str.Format("%s",sz);2) CString-> char*CString str;int nLength = str.GetLength();char* sz = new char[nLength];sz = str.GetBuffer(0);5.3 float<->CString1)float/double->CStringfloat f = 0.0;CString str;str.Format("%f",f);2) CString->float/doubleCString str = "0.0";float f = _tto(str);Format函数第一个参数是要转的那个数的类型我现在的程序是int a = 21;double b = 3.45;str.Format("%03d%02.4f" , a , b);现在得到的结果是"0213.4500"%02.4f对b的整数部分不起作用我想要得到一个形如aaabb.bbbb的字符串("02103.4500"),如果a不足3位,用0补齐,如果b的整数和小数不足2位和4位也要用0补齐CString::Format("%d",xx);其中xx不能为双精度,不然会转化错误,应该使用CString::Format("%d",(LONG)xx);例:DOUBLE d = 22.443;CString str;str.Format("%d", d);转化后的str = "1924145349",这是错误的!1、CString to char*经过类型强制转换,可以将CString类型转换成char*,例如: CString cStr = "Hello,world!"; char* zStr = (char*)(LPCTSTR)cStr;2、char* to CStringchar*类型可以直接给CString,完成自动转换,例如: char* zStr = "Hello,world!"; CString cStr = zStr;3、CString to LPCSTR将CString转换成LPCSTR,需要获得CString的长度,例如: CString cStr = _T("Hello,world!"); int nLen = cStr.GetLength();LPCSTR lpszBuf = cStr.GetBuffer(nLen);4、CString to LPSTR这个和第3个技巧是一样的,例如: CString cStr = _T("Hello,world!"); int nLen = str.GetLength();LPSTR lpszBuf = str.GetBuffer(nLen);5、Char[] to int将字符串类型转换成整数型,可以使用atoi函数,例如:char c[10];int n; n = atoi(c)6、Char[] to float和第5个技巧一样,使用atof()函数可以转换成float型,例如: char c[10]; float f; f = atof(c);7、Char* to int和第5个技巧完全一样,例如: char *str = "100"; int i;i = atoi(str);一、其它数据类型转换为字符串短整型(int)itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制itoa(i,temp,2); ///按二进制方式转换长整型(long) ltoa(l,temp,10);二、从其它包含字符串的变量中获取指向该字符串的指针CString变量str = "2008北京奥运";buf = (LPSTR)(LPCTSTR)str; BSTR类型的_variant_t变量 v1 = (_bstr_t)"程序员";buf = _com_util::ConvertBSTRToString((_bstr_t)v1);三、字符串转换为其它数据类型 strcpy(temp,"123");短整型(int)i = atoi(temp); 长整型(long) l = atol(temp); 浮点(double) d = atof(temp);四、其它数据类型转换到CString使用CString的成员函数Format来转换,例如:整数(int)str.Format("%d",i); 浮点数(float)str.Format("%f",i);字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值 str = username;CString转字符数组:int a;char ch[20];CString str;strcpy(ch,CW2A(str));Int转char[]字符数组Int m_insA_Vchar insA_V[10] = {0};itoa(m_insA_V,insA_V,10);Float转char[]字符数组函数名: gcvt把浮点数转换成字符串,同时返回一个指向字符串的存储位置的指针的函数用法: char *gcvt(double value, int ndigit, char *buf);参数value——被转换的值。
Cstring转charstringint等数据类型的方法
Cstring转charstringint等数据类型的方法C++提供了许多方法来进行Cstring到其他数据类型的转换。
下面是一些常用的方法:1. Cstring转char数组:我们可以使用Cstring类的`c_str(`方法将Cstring转换为char数组。
该方法返回一个指向Cstring内部的字符数组的指针。
例如:```cpp#include <iostream>#include <cstring>using namespace std;int maiconst char* charArr = str.c_str(;cout << "char array: " << charArr << endl;return 0;```输出:```char array: Hello World```2. Cstring转string:可以使用string类的构造函数来将Cstring转换为string类型。
例如:```cpp#include <iostream>#include <cstring>using namespace std;int maistring strObj(str);cout << "string: " << strObj << endl;return 0;```输出:```string: Hello World```3. Cstring转int:将Cstring转换为int有几种方法,其中一种是使用标准库函数`atoi(`。
例如:```cpp#include <iostream>#include <cstring>#include <cstdlib>using namespace std;int maiint num = atoi(str.c_str();cout << "int: " << num << endl;return 0;```输出:``````这里我们首先使用了`c_str(`方法将Cstring转换为char数组,然后使用`atoi(`将char数组转换为int类型。
CString与LPCWSTR、LPSTR、char、LPWSTR等类型的转换
CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换一.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转换成CStringLPCWSTR 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*转换成CStringchar* p = "test";CString str = ("%s",p);四.String和int、float的转换可以使用atoi,atof,atol等函数来完成。
CString 类型转换大全
CString 类型转换大全首页>CString转int _ttoi() _tcstoul() Format ASSERT()作者: tags:Form for TC ORM String int CString assert str sse ing for inassert int _ttoi() _tcstoul() Format ASSERT()CString 型转化成 int 型把 CString 类型的数据转化成整数类型最简单的方法就是使用标准的字符串到整数转换例程。
虽然通常你怀疑使用_atoi()函数是一个好的选择,它也很少会是一个正确的选择。
假如你预备使用 Unicode 字符,你应该用_ttoi(),它在 ANSI 编码系统中被编译成_atoi(),而在 Unicode 编码系统中编译成_wtoi()。
你也可以考虑使用_tcstoul()或者_tcstol(),它们都能把字符串转化成任意进制的长整数(如二进制、八进制、十进制或十六进制),不同点在于前者转化后的数据是无符号的(unsigned),而后者相反。
看下面的例子:CString hex = _T("FAB");CString decimal = _T("4011");ASSERT(_tcstoul(hex, 0, 16) == _ttoi(decimal));在做DWORD与 CString 比较的时候,需要将CString 转换成 DWORD,有几种转换方法,但是明明转换结果是一样的,可就是提示不相等,后来 _tcstoul()转换后才相等,记录下CString str = lp->GetSubItem(nCol);// MessageBox(str,m_strItem,MB_OK);DWORD dwData = _tcstoul( str, NULL, 10 ); // 10进制if (dwItem ==dwData){//AfxMessageBox("找到找到找到找到找到找到找到找到找到找到找到找到找到");return pCur;}使用_tcstoul()或者_tcstol(),它们都能把字符串转化成任意进制的长整数(如二进制、八进制、十进制或十六进制),不同点在于前者转化后的数据是无符号的(unsigned),而后者相反。
CString,string 与Char 的转换
CString,string 与Char 的转换2007-05-17 21:41//******************************************************************* **01.CString to char pointer//******************************************************************* ***CString mystring = "abcde";char *szmystring = (char *)(LPCTSTR)mystring ;char *pBuffer =new char[1024];CString strBuf = "test";pBuffer = strBuf.GetBuffer(sizeof(pBuffer));&pBuffer=strBuf.GetBuffer(strBuf.GetLength);//*************************************************************02.char pointer to CString//******************************************************************* char *mystring = "12345";CString string = mystring;string.Format("%s",mystring)//******************************************************************03.string CString以及char*//****************************************************************** string是方便的,可以从几乎所有的字符串构造而来,包括CString和char*;CString次之,可以从基本的一些字符串变量构造而来,包括char*等;char*没有构造函数,仅可以赋值;举例:char* psz = “joise”;string str( cstr );string是最方便的,几乎可以直接用所有的字符串赋值,包括CString和char*;CString次之,可以直接用些基本的字符串赋值,包括char*等;char*只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值建议先设为NULL,以避免野指针,令你抓狂;举例:char *psz = NULL;psz = new char[10]; //当然,以上的直接写成char *psz = new char[10];也是一样memset( psz, 0, 10 );strcpy( psz, “joise” );CString cstr;cstr = psz;string str;str = psz;str = cstr;delete []psz;string与CString差不多,可以直接与char*进行加法,但不可以相互使用+运算符,即string str = str + cstr是非法的,须转换成char*;char*没有+运算,只能使用strcat把两个指针连在一起;举例:char* psz = “joise”;CString cstr = psz;string str = psz;str = str + str + psz;strcat( psz, psz );strcat( psz, cstr );//合法strcat( psz, str );//非法,由此可见,CString可自动转换为const char*,而string不行//****************************************************************** ************************************//不明白的继续://****************************************************************** ***********************************CString与char*的转换CString与char*的转换参见如下代码:1 int i=m_edit1.GetLength();2 char* p;3 CString hex4="\0";4 CString hex5="\0";5 m_edit3.SetSel(0,-1);6 m_edit3.ReplaceSel("");7 p=m_edit1.GetBuffer(i);8 for(int j=0;j<i;j++) {9 hex5.Format("%x ",(unsigned char)*p++);10 hex4+=hex5;11 }12 m_edit3.ReplaceSel(hex4);其中m_edit3是一个CEdit类型的变量,SetSel,ReplaceSel都是其成员函数,可以参见MSDN。
MFC、C++、C中字符类型CString int string char知识
MFC/C++/C中字符类型CString, int, string, char*转换(转)参考网址:/s/blog_50a0aa5e0100dntj.html1 CString,int,string,char*之间的转换string 转CString例子:CString.format("%s", string.c_str());char 转CString例子:CString.format("%s", char*);char 转string例子:string s(char *);string 转char *例子:char *p = string.c_str();// CString转std::stringCString str = dlg.GetPathName();setlocale(LC_ALL, "chs");char *p = new char[256];wcstombs ( p, str, 256 );m_fileName = p;1,string -> CStringCString.format("%s", string.c_str());用c_str()确实比data()要好.2,char -> stringstring s(char *);你的只能初始化,在不是初始化的地方最好还是用assign().3,CString -> stringstring s(CString.GetBuffer());GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间. 《C++标准函数库》中说的有三个函数可以将字符串的内容转换为字符数组和C—string1.data(),返回没有”\0“的字符串数组2,c_str(),返回有”\0“的字符串数组3,copy()CString互转int 将字符转换为整数,可以使用atoi、_atoi64或atol。
CString,int,string,char,BSTR之间的转换
一.CString, int, string, char*之间的转换string 转CStringCString.Format("%s", string.c_str());char 转CStringCString.Format("%s", char*);char 转stringstring s(char *);string 转char *char *p = string.c_str();CString 转stringstring s(CString.GetBuffer());1.string -> CStringCString. Format("%s", string.c_str());用c_str()确实比data()要好.2.char -> stringstring s(char *);你的只能初始化,在不是初始化的地方最好还是用assign().3.CString -> stringstring s(CString.GetBuffer());GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.《C++标准函数库》中:有三个函数可以将字符串的内容转换为字符数组和C—string1.data(),返回没有”\0“的字符串数组2.c_str(),返回有”\0“的字符串数组3.copy()CString 和int互转将字符转换为整数,可以使用atoi、_atoi64或atol.将数字转换为CString变量,可以使用CString的Format函数。
如(1)CString s;int i = 64;s.Format("%d", i)Format函数的功能很强,值得你研究一下。
(2)void CStrDlg::OnButton1(){// TODO: Add your control notification handler code hereCString ss="1212.12";int temp=atoi(ss); //字符转换为整数CString aa;aa.Format("%d",temp); //整数转换为字符AfxMessageBox("var is " + aa);}CString和char*互转(1)char * -> CStringCString strtest;char * charpoint;charpoint="give string a value";strtest=charpoint;(2)CString -> char *charpoint=strtest.GetBuffer(strtest.GetLength());标准C里没有string,char *==char []==string可以用CString.Format("%s",char *)这个方法来将char *转成CString。
cstringchar_bstr_t转换[宝典]
CString char _bstr_t 转换CString 型和 char* 类型的相互转化1.CString 转化成 char* 之一:强制类型转换为 LPCTSTR;这是一种略微硬性的转换,有关“正确”的做法,人们在认识上还存在许多混乱,正确的使用方法有很多,但错误的使用方法可能与正确的使用方法一样多。
我们首先要了解 CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数以及一个缓冲区长度。
有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL 字符)。
字符记数和缓冲区长度被巧妙隐藏。
除非你做一些特殊的操作,否则你不可能知道给CString对象分配的缓冲区的长度。
这样,即使你获得了该0缓冲的地址,你也无法更改其中的内容,不能截短字符串,也绝对没有办法加长它的内容,否则第一时间就会看到溢出。
LPCTSTR 操作符(或者更明确地说就是 TCHAR * 操作符)在CString 类中被重载了,该操作符的定义是返回缓冲区的地址,因此,如果你需要一个指向 CString 的字符串指针的话,可以这样做:CString s("GrayCat");LPCTSTR p = s;它可以正确地运行。
这是由C语言的强制类型转化规则实现的。
当需要强制类型转化时,C++规测容许这种选择。
比如,你可以将(浮点数)定义为将某个复数(有一对浮点数)进行强制类型转换后只返回该复数的第一个浮点数(也就是其实部)。
可以象下面这样:Complex c(1.2f, 4.8f);float realpart = c;如果(float)操作符定义正确的话,那么实部的的值应该是1.2。
这种强制转化适合所有这种情况,例如,任何带有 LPCTSTR 类型参数的函数都会强制执行这种转换。
于是,你可能有这样一个函数(也许在某个你买来的DLL中):BOOL DoSomethingCool(LPCTSTR s);你象下面这样调用它:CString file("c:\\myfiles\\coolstuff")BOOL result = DoSomethingCool(file);它能正确运行。
CString_操作指南
CString操作指南CString是一种很有用的数据类型。
它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。
不管怎样,使用CStrin g 有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。
CString对象的连接1格式化字符串(包括int型转化为CString)2CString型转化成int型CString型和char*类型的相互转化char*转化成CStringCString转化成char*之一:使用LPCTSTR强制转化CString转化成char*之二:使用CString对象的GetBuffer方法CString转化成char*之三:和控件的接口3CString型转化成BSTR型;4BSTR型转化成CString型;5VARIANT型转化成CString型;6载入字符串表资源;7CString和临时对象;8CString的效率;9总结1、CString对象的连接能体现出CString类型方便性特点的一个方面就字符串的连接,使用CString类型,你能很方便地连接两个字符串,正如下面的例子:CString gray("Gray");CString cat("Cat");CString graycat=gray+cat;要比用下面的方法好得多:char gray[]="Gray";char cat[]="Cat";char*graycat=malloc(strlen(gray)+strlen(cat)+1);strcpy(graycat,gray);strcat(graycat,cat);2、格式化字符串与其用sprintf()函数或wsprintf()函数来格式化一个字符串,还不如用CString对象的Format()方法:CString s;s.Format(_T("The total is%d"),total);用这种方法的好处是你不用担心用来存放格式化后数据的缓冲区是否足够大,这些工作由CString类替你完成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.VC常用数据类型列表二.常用数据类型转化2.1数学类型变量与字符串相互转换_ttoi(CString->int) _tstof(CString->double)2.2CString及string,char *与其他数据类型的转换和操作●CString,string,char*的综合比较●数学类型与CString相互转化●CString与char*相互转换举例●CString 与 BSTR 型转换●VARIANT 型转化成 CString 型2.3 BSTR、_bstr_t与CComBSTR2.4 VARIANT 、_variant_t 与 COleVariant附录CString及字符串转及操作详解参考书籍:CSDN,<<MFC深入浅出(Second Edit)>> 一.VC常用数据类型列表int iTyep=3;char *szChar;itoa(iType,szChar,2);cout<<szChar;//输出为1010类似函数列表:_CRTIMP char * __cdecl _itoa(int, char *, int);//为了完整性,也列在其中_CRTIMP char * __cdecl _ultoa(unsigned long, char *, int);_CRTIMP char * __cdecl _ltoa(long, char *, int);_CRTIMP char * __cdecl _i64toa(__int64, char *, int);_CRTIMP char * __cdecl _ui64toa(unsigned __int6 4, char *, int);_CRTIMP wchar_t * __cdecl _i64tow(__int64, wchar_t *, int);_CRTIMP wchar_t * __cdecl _ui64tow(unsigned __int64, wchar_t *, int);_CRTIMP wchar_t * __cdecl _itow (int, wc har_t *, int);//转换为长字符串类型_CRTIMP wchar_t * __cdecl _ltow (long, wchar_t *, int);_CR TIMP wchar_t * __cdecl _ultow (unsigned long, wchar_t *, int);还有很多,请自行研究(2)将字符串类型转换为数学类型变量可以用以下一些函数:举例: _CRTIMP int __cdecl atoi(co nst char *);//参数一看就很明了char *szChar=”88”;int temp(0);temp=atoi(szChar); cout<<temp;类似的函数列表:_CRTIMP int __cdecl atoi(const char *);_CRTIMP double __cd ecl atof(const char *);_CRTIMP long __cdecl atol(const char *);_CRTIMP long double __cdecl _atold(const char *);_CRTIMP __int64 __cdecl _atoi64(const char *);_CRTIMP double __cdecl s trtod(const char *, char **);//_CRTIMP long __cdecl strtol(const char *, char **, int);//_ CRTIMP long double __cdecl _strtold(const char *, char **);_CRTIMP unsigned long __cdecl str toul(const char *, char **, int);_CRTIMP double __cdecl wcstod(const wchar_t *, wchar_t **); //长字符串类型转换为数学类型_CRTIMP long __cdecl wcstol(const wchar_t *, wchar_t **, int); _CRTIMP unsigned long __cdecl wcstoul(const wchar_t *, wchar_t **, int);_CRTIMP int __cdecl _wtoi(const wchar_t *);_CRTIMP long __cdecl _wtol(const wchar_t *);_CRTIMP __int64 __cdecl _wtoi64(const wchar_t *);还有很多,请自行研究2.2.CString及string,char *与其他数据类型的转换和操作(1)CString,string,char*的综合比较(这部分CSDN上的作者joise的文章<< CString,string,char*的综合比较>>写的很详细,请大家在仔细阅读他的文章.地址: /joise/或参考附录:(2)转换:●数学类型与CString相互转化数学类型转化为CString可用Format函数,举例:CString s;int i = 64;s.Format("%d", i)CString转换为数学类型:举例CString strValue("1.234");double dblValue;dblValue = atof((LPCTSTR)strValue);●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;●CString 与 BSTR 型转换CString 型转化成 BSTR 型当我们使用 ActiveX 控件编程时,经常需要用到将某个值表示成 BSTR 类型.B STR 是一种记数字符串,Intel平台上的宽字符串(Unicode),并且可以包含嵌入的 NULL 字符。
可以调用 CString 对象的 AllocSysString 方法将 CString 转化成 BS TR:CString str;str = .....; // whateverBSTR bStr = str.AllocSysString();BSTR型转换为CString如果你在 UNICODE 模式下编译代码,你可以简单地写成:CString convert(BSTR bStr){if(bStr == NULL)return CString(_T(""));CString s(bStr); // in UNICODE modereturn s;}如果是 ANSI 模式CString convert(BSTR b){CString s;if(b == NULL)return s; // empty for NULL BSTR#ifdef UNICODEs = b;#elseLPSTR p = s.GetBuffer(SysStringLen(b) + 1);::WideCharToMultiByte(CP_ACP, // ANSI Code Page0, // no flagsb, // source widechar stri ng-1, // assume NUL-terminate dp, // target bufferSysStringLen(b)+1, // target buffer length NULL, // use system default c harNULL); // don''t care if defau lt useds.ReleaseBuffer();#endifreturn s;}●VARIANT 型转化成 CString 型VARIANT 类型经常用来给 COM 对象传递参数,或者接收从 COM 对象返回的值。
你也能自己编写返回 VARIANT 类型的方法,函数返回什么类型依赖可能(并且常常)方法的输入参数(比如,在自动化操作中,依赖与你调用哪个方法。
IDi spatch::Invoke 可能返回(通过其一个参数)一个包含有BYTE、WORD、float、double、date、BSTR 等等 VARIANT 类型的结果,(详见 MSDN 上的 VARIANT 结构的定义)。
在下面的例子中,假设类型是一个BSTR的变体,也就是说在串中的值是通过 bsrtVal 来引用,其优点是在 ANSI 应用中,有一个构造函数会把 LPCWCHAR 引用的值转换为一个 CString(见 BSTR-to-CString 部分)。
在Unicode 模式中,将成为标准的 CString 构造函数,参见对缺省::WideCharTo MultiByte 转换的告诫,以及你觉得是否可以接受(大多数情况下,你会满意的)。
VARIANT vaData;vaData = m_com.YourMethodHere();ASSERT(vaData.vt == VT_BSTR);CString strData(vaData.bstrVal);你还可以根据 vt 域的不同来建立更通用的转换例程。
为此你可能会考虑: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 opt ional)return CString("");} /* vt */}2.3 BSTR、_bstr_t与CComBSTRCComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。