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,建议大家使用它。
宽字节与ANSCI的转换(CString和char类型的转换)
宽字节与ANSCI的转换(CString和char类型的转换)宽字节和char类型的转换一、将窄字节转换为宽字节wstring MultCHarT oWideChar(string str){//获取缓冲区的大小,并申请空间,缓冲区大小是按字符计算的intlen=MultiByteT oWideChar(CP_ACP,0,str.c_str(),str.size(),NULL,0);TCHAR *buffer=new TCHAR[len+1];//多字节编码转换成宽字节编码MultiByteToWideChar(CP_ACP,0,str.c_str(),str.size(),buffer,len);buffer[len]='';//添加字符串结尾//删除缓冲区并返回值wstring return_value;return_value.append(buffer);delete []buffer;return return_value;}string WideCharToMultiChar(wstring str){string return_value;//获取缓冲区的大小,并申请空间,缓冲区大小是按字节计算的intlen=WideCharToMultiByte(CP_ACP,0,str.c_str(),str.size(),NULL,0,N ULL,NULL); char *buffer=new char[len+1];WideCharT oMultiByte(CP_ACP,0,str.c_str(),str.size(),buffer,len, NULL,NULL);buffer[len]='';//删除缓冲区并返回值return_value.append(buffer);delete []buffer;return return_value;}string mstring = WideCharToMultiChar( (LPCTSTR)mCString ); strcpy_s( pach, sizeof(pach), mstring.c_str() );。
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、char、string、_bstr_t、CTime、DateTime相互转换
转自烧鱼の绯想天#include <string>#include <iostream>using namespace std;void main(void){CString strCString="ABC";char strchar[256],*pstr;pstr=(LPSTR)(LPCTSTR)strCString; //CString---->char*strcpy(strchar,(LPSTR)(LPCTSTR)strCString); //CString---->char[]_bstr_t strbstr=pstr; //char*---->_bstr_tWCHAR *strWCHAR=strbstr; //b_str_t--->UNICODEstrbstr=strWCHAR;pstr=strbstr; //UNICODE---->char*strCString="10";int istr=atoi((LPSTR)(LPCTSTR)strCString); //CString、char[]、char*------>intstrCString.Format("%d",istr); //int----->CStringsprintf(strchar,"%d",istr); //int----->char[]pstr=new char[256]; //字符串申请空间strcpy(pstr,"ABC"); //字符串赋值delete []pstr; //字符串释放string strstring="ABC";pstr=(char*)strstring.c_str(); //string---->char*strCString="2003-10-27 6:24:37"; //CString--->COleDateTimeCOleVariant vtime(strCString);vtime.ChangeType(VT_DATE);COleDateTime time4=vtime;COleDateTime time1(1977,4,16,2,2,2); //COleDataTime--->CTimeSYSTEMTIME systime;VariantTimeToSystemTime(time1, &systime);CTime tm(systime);time_t time2=tm.GetTime(); //CTime--->time_tCOleDateTime time3(time2); //time_t--->COleDateTime//判断字符串是否是某种类型CString sValue("123.1");COleVariant vValue(sValue);BOOL bStrIsFloat = (SUCCEEDED(VariantChangeType(&vValue, &vValue, 0, VT_R8)) && sValue.Find('.') != -1);if(bStrIsFloat){AfxMessageBox("浮点");}}。
Cstring的赋值格式转换等
Cstring的赋值格式转换等一 Cstring1. 初始化方法:(1) 直接复制,如Cstring=”mingrisoft”;(2) 通过构造函数初始化,如 CString str(‘ ’,100)//与分配100个字节,填充空格char* p=”feiqiang”; Cstring(p);delete p.(3) 加载工程中的字符串资源,如CString str;str.LoadString(IDS_STR);(4) 使用CString类的成员函数Format初始化,如CString str; int i=0; str.Format(“value:%d”,i);2. 将CString转化为char*,如CString str=”feqiang”;char *p;p=str.GetBuffer();delete p;将char*转化为CString,如:char* p=”feiqiang”;p[len(p)]=’\0’;Cstring str(p);char* 和char数组的转化:char buf[5] ={‘a’,’b’,’c’};char *p;p=new char[5];p=buf;将字符串转化为数字:CString str=”12”;int i=atoi(str);long j=atoll(str);float f=atof(str);将数字转化为字符串:CString str;int i=12;str.Format(“%d”,i);long j=12;str,Format(“%ld”,j);同理其他类型。
3. 字符串的相关操作即方法的使用:(1) 提取字符串中的中文,如CString strtext,temp,strres;GetLlgItem(IDC_TEXT)->GetWindowText(strtext);//通过ID获取编辑框中的文本for(int =\0;i<strtext.GetLength();i++){char ch=strtext.GetAt(i);if(IsDBCSLeadByte(ch)){ //判断字符是否是双字节编码的前一个字节tmp=strtext.Mid(i,2);//截取索引index1到index2的字符[ )i++;stress+=tmp;}GetLlgItem(IDC_RESULT)->SetWindowText(strtes);//设置文本框中的文本}(2) 英文字符串首字母大写,如将以空格符分隔的英文单词的第一个字母大写(小写)str.GetAt(i);//提取字符串索引为i个字母str.MakeLower();//转化为小写tmp.MakeUpper();//转化为大写(2) 按制定符号分割字符:int pos=str.Find(strchar);//查找字符,如果没找到,则返回0,找到则返回字符的位置,参数可以是字符也可以是字符串while(pos>0){str1=str.Left(pos);//取左,参数为字符串的个数str=str.Right(str.GetLength-pos-1);//取右,参数同上tmp.Format(“%s\r\n”,str1);//字符串中\r\n代表回车化行符strres+=tmp;pos=str.Find(strchar);}(3) 删除指定的中文:m_text.GetWindowText(strtxt);m_text.GetSel(istart,iend);//得到文本框中选中的文本,并且得到文本的头索引和尾索引if(istart==iend){return;}str1=strtxt.Left(istart);if(iend>=strtxt.GetLength()){str2=””;}else{str2=strtxt.Right(strtxt.GetLength()-iend);}strres+=str1;strres+=str2;(4) 替换字符串:strtxt.Replace(strchar,strnew);//用新串替换旧串(5) 根据CPoint查找位置:CPoint pt;//获取字符串时获取鼠标所在字符串的位置int pos=m_text.CharFromPos(pt);//根据pt获取字符串中的位置,即其左侧字符的位置if(str.IsEmpty()){//判断字符串是否为空m_num.AddString(strres);//文本框追加字符串}将字符转化为大写:ch=ch-32;(6) 字符串忽略大小写的比较:CString str=”feiqiang”;int com=pareNoCase(“mingri”);//如果相等返回0,否则返回-1;(7) 连接换行符:CString str=”feiqiang\t”;(8) 字符反转:str.MakeReverse();(9) 取出首位空格:str.TrimLeft(); str.TrimRight();取出字符串中的所有空格,str.Replace(“ ”,””);(10) 在ListBox中查找字符串int index=::SendMessage(m_stringlist.GetSafeHwnd(),LB_FINDSTRINGEXACT,-1, (LPARAM)(LPCTSTR)strtext));//通过SendMessage函数向列表控件发送LB_FINDSTRINGEXACT消息来查找指定字符串是否在列表空间中,如果存在则返回索引位置。
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);
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函数。
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。
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、LPSTR、std::string、LPCSTR之间的转换
CString、LPSTR、std::string、LPCSTR之间的转换LPSTR WideChar2MBCS( const CString& strCS ){const UINT wLen = strCS.GetLength() + 1;UINT aLen = WideCharT oMultiByte(CP_ACP,0,strCS,wLen,NU LL,0,NULL,NULL);LPSTR lpa = new char[aLen];WideCharT oMultiByte(CP_ACP,0,strCS,wLen,lpa,aLen,NULL,N ULL);return lpa;}std::string WideChar2StdStr(const CString& strcs){LPSTR l = WideChar2MBCS(strcs);std::string stdStr(l);delete [] l;return stdStr;}LPOLESTR MBCS2WideChar( LPCSTR lpa ){size_t aLen = strlen(lpa) + 1;int wLen = MultiByteToWideChar(CP_ACP,0,lpa,aLen,NULL,0);LPOLESTR lpw = new WCHAR[wLen];MultiByteToWideChar(CP_ACP,0,lpa,aLen,lpw,wLen);return lpw;}CString MBCS2CString( LPCSTR lpa ){LPOLESTR lpw = MBCS2WideChar(lpa);CString cstring(lpw);delete [] lpw;return cstring;}CString StdStr2CSting( const std::string& stdStr ){return MBCS2CString(stdStr.c_str());}#include<string>using namespace std;//将string转换成wstringwstring string2wstring(string str){wstring result;//获取缓冲区大小,并申请空间,缓冲区大小按字符计算int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0);TCHAR* buffer = new TCHAR[len + 1];//多字节编码转换成宽字节编码MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len);buffer[len] = '\0'; //添加字符串结尾//删除缓冲区并返回值result.append(buffer);delete[] buffer;return result;}//将wstring转换成stringstring wstring2string(wstring wstr){string result;//获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的int len = WideCharT oMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);char* buffer = new char[len + 1];//宽字节编码转换成多字节编码WideCharT oMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);buffer[len] = '\0';//删除缓冲区并返回值result.append(buffer);delete[] buffer;return result;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CString 类型转换大全首页>CString转int _ttoi() _tcstoul() Format ASSERT()作者: tags:Form for TC ORM String int CString assert str sse ing for in assert 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_s trItem,MB_OK);DWORD dwData = _tcstoul( st r, NULL, 10 ); // 10进制if (dwItem ==dwData){//AfxMessageBox("找到找到找到找到找到找到找到找到找到找到找到找到找到");return pCur;}使用_tcstoul()或者_tcstol(),它们都能把字符串转化成任意进制的长整数(如二进制、八进制、十进制或十六进制),不同点在于前者转化后的数据是无符号的(unsigned),而后者相反。
看下面的例子:CString hex = _T("FAB");CString decimal = _T("4011");ASSERT(_tcstoul(hex, 0, 16) == _ttoi(decimal));////////////////////////////////////////////////////////////////////////////////// //////////////////Format函数VC++中Format函数详解首先看它的声明:function Format(const Format: string; const Args: array of const): string; overload;事实上Format方法有两个种形式,另外一种是三个参数的,主要区别在于它是线程安全的,但并不多用,所以这里只对第一个介绍:function Format(const Format: string; const Args: array of const): string; overload;Format参数是一个格式字符串,用于格式化Args里面的值的。
Args又是什么呢,它是一个变体数组,即它里面可以有多个参数,而且每个参数可以不同。
如以下例子:Format("my name is %6s","wind");返回后就是my name is wind现在来看Format参数的具体情况:Format里面可以写普通的字符串,比如"my name is"但有些格式指令字符具有非凡意义,比如"%6s"格式指令具有以下的形式:"%" [index ":"] ["-"] [width] ["." prec] type它是以"%"开始,而以type结束,type表示一个具体的类型。
中间是用来格式化type类型的指令字符,是可选的。
先来看看type,type可以是以下字符:d 十制数,表示一个整型值u 和d一样是整型值,但它是无符号的,而假如它对应的值是负的,则返回时是一个2的32次方减去这个绝对值的数如:Format("this is %u",-2);返回的是:this is 4294967294f 对应浮点数e 科学表示法,对应整型数和浮点数,比如Format("this is %e",-2.22);返回的是:this is -2.220000E+000等一下再说明假如将数的精度缩小g 这个只能对应浮点型,且它会将值中多余的数去掉比如Format("this is %g",02.200);返回的是:this is 2.2n 只能对应浮点型,将值转化为号码的形式。
看一个例子就明白了Format("this is %n",4552.2176);返回的是this is 4,552.22注重有两点,一是只表示到小数后两位,等一下说怎么消除这种情况二是,即使小数没有被截断,它也不会也像整数部分一样有逗号来分开的m 钱币类型,但关于货币类型有更好的格式化方法,这里只是简单的格式化另外它只对应于浮点值Format("this is %m",9552.21);返回:this is ¥9,552.21p 对应于指针类型,返回的值是指针的地址,以十六进制的形式来表示例如:Format("this is %p",p);Edit1的内容是:this is 0012F548s 对应字符串类型,不用多说了吧x 必须是一个整形值,以十六进制的形式返回Format("this is %X",15);返回是:this is F类型讲述完毕,下面介绍格式化Type的指令:[index ":"] 这个要怎么表达呢,看一个例子Format("this is %d %d",12,13);其中第一个%d的索引是0,第二个%d是1,所以字符显示的时候是这样this is 12 13而假如你这样定义:Format("this is %1:d %0:d",12,13);那么返回的字符串就变成了this is 13 12现在明白了吗,[index ":"] 中的index指示Args中参数显示的顺序还有一种情况,假如这样Format("%d %d %d %0:d %d", 1, 2, 3, 4) ;将返回1 2 3 1 2。
假如你想返回的是1 2 3 1 4,必须这样定:Format("%d %d %d %0:d %3:d", 1, 2, 3, 4) ;但用的时候要注重,索引不能超出Args中的个数,不然会引起异常如Format("this is %2:d %0:d",12,13);由于Args中只有12 13 两个数,所以Index只能是0或1,这里为2就错了[width] 指定将被格式化的值占的宽度,看一个例子就明白了Format("this is %4d",12);输出是:this is 12这个是比较轻易,不过假如Width的值小于参数的长度,则没有效果。
如:Format("this is %1d",12);输出是:this is 12["-"] 这个指定参数向左齐,和[width]合在一起最可以看到效果:Format("this is %-4d,yes",12);输出是:this is 12 ,yes["." prec] 指定精度,对于浮点数效果最佳:Format('this is %.2f',['1.1234]);输出 this is 1.12Format('this is %.7f',['1.1234]);输了 this is 1.1234000而对于整型数,假如prec比如整型的位数小,则没有效果反之比整形值的位数大,则会在整型值的前面以0补之Format('this is %.7d',[1234]);输出是:this is 0001234]对于字符型,刚好和整型值相反,假如prec比字符串型的长度大则没有效果,反之比字符串型的长度小,则会截断尾部的字符Format('this is %.2s',['1234']);输出是 this is 12而上面说的这个例子:Format('this is %e',[-2.22]);返回的是:this is -2.22000000000000E+000怎么去掉多余的0呢,这个就行啦Format('this is %.2e',[-2.22]);好了,第一个总算讲完了,应该对他的应用很熟知了吧///////////////////////////////////////////////////////////////二 FormatDateTime的用法他的声明为:function FormatDateTime(const Format: string; DateTime: TDateTime): string;overload;当然和Format一样还有一种,但这里只介绍常用的第一种Format参数是一个格式化字符串。
DateTime是时间类型。
返回值是一种格式化后的字符串重点来看Format参数中的指令字符c 以短时间格式显示时间,即全部是数字的表示FormatdateTime('c',now);输出为:2004-8-7 9:55:40d 对应于时间中的日期,日期是一位则显示一位,两位则显示两位FormatdateTime('d',now);输出可能为1~31dd 和d的意义一样,但它始终是以两位来显示的FormatdateTime('dd',now);输出可能为01~31ddd 显示的是星期几FormatdateTime('ddd',now);输出为: 星期六dddd 和ddd显示的是一样的。