CString_与其他类型的转换
- 格式:docx
- 大小:31.84 KB
- 文档页数:9
一.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,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)不⾏。
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位指针。
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函数。
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等数据类型的方法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两者的不同: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转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),而后者相反。
一.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位指针。