C++ - CString转换
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的赋值格式转换等
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、TCHAR、char转换
CString、TCHAR*、char*转换char*、TCHAR*转换CStringCString str(****)下面详细写一下其它转换///////////////////////////////**************************************************************** ********* 函数: TransCStringToTCHAR* 描述:将CString 转换为 TCHAR** 日期:*************************************************************** *********/TCHAR* CPublic::CString2TCHAR(CString &str){int iLen = str.GetLength();TCHAR* szRs = new TCHAR[iLen];lstrcpy(szRs, str.GetBuffer(iLen));str.ReleaseBuffer();return szRs;}/**************************************************************** ********* 函数: TCHAR2Char* 描述:将TCHAR* 转换为 char** 日期:*************************************************************** *********/char* TCHAR2char(TCHAR* tchStr){int iLen = 2*wcslen(tchStr);//CString,TCHAR汉字算一个字符,因此不用普通计算长度char* chRtn = new char[iLen+1]wcstombs(chRtn,tchStr,iLen+1);//转换成功返回为非负值return chRtn;}/**************************************************************** ********* 函数: char2tchar* 描述:将 char* 转换为 TCHAR** 日期:*************************************************************** *********/TCHAR *char2tchar(char *str){int iLen = strlen(str);TCHAR *chRtn = new TCHAR[iLen+1];mbstowcs(chRtn, str, iLen+1);return chRtn;/**************************************************************** ********* 函数: CString2char* 描述:将CString转换为 char** 日期:*************************************************************** *********/char* CPublic::CString2char(CString &str){int len = str.GetLength();char* chRtn = (char*)malloc((len*2+1)*sizeof(char));//CString 的长度中汉字算一个长度memset(chRtn, 0, 2*len+1);USES_CONVERSION;strcpy((LPSTR)chRtn,OLE2A(str.LockBuffer()));return chRtn;}//参考/////////////////////////Pocket PC上的UNICODE和ANSI字符串//By Vassili Philippov, September 26, 2001.//杨方思歧译/////////////////////////**************************************************************** ********* 函数名:GetAnsiString* 描述:将CString(unicode)转换为char*(ANSI)* 参数:CString &s 要转换的CString* 返回值:返回转换结果* 创建日期:* 最后修改:*************************************************************** *********/char* GetAnsiString(const CString &s){int nSize = 2*s.GetLength();char *pAnsiString = new char[nSize+1];wcstombs(pAnsiString, s, nSize+1);return pAnsiString;}/////////////////////////////////////////////////////////////////// ///////////////////////////WideCharT oMultiByte和MultiByteT oWideChar函数的用法支持Unicode编码,需要多字节与宽字节之间的相互转换WideCharT oMultiByte的代码页用来标记与新转换的字符串相关的代码页。
char与csting类型转换
CString位于头文件afx.h中。
CString 是一种很有用的数据类型。
它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。
不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。
这篇文章就来讨论这些技巧。
使用CString可以让你对字符串的操作更加直截了当。
这篇文章不是CString的完全手册,但囊括了大部分常见基本问题。
这篇文章包括以下内容:CString 对象的连接格式化字符串(包括int 型转化为CString )CString 型转化成int 型CString 型和char* 类型的相互转化char* 转化成CStringCString 转化成char* 之一:使用LPCTSTR强制转化CString 转化成char* 之二:使用CString对象的GetBuffer方法CString 转化成char* 之三: 和控件的接口CString 型转化成BSTR 型;BSTR 型转化成CString 型;VARIANT 型转化成CString 型;载入字符串表资源;CString 和临时对象;CString 的效率;总结下面我分别讨论。
[编辑本段]1、CString 对象的连接能体现出CString 类型方便性特点的一个方面就是字符串的连接,使用CStrin g 类型,你能很方便地连接两个字符串,正如下面的例子: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() 函数来格式化一个字符串,还不如用CStri ng 对象的Format()方法:CString s;s.Format(_T("The total is %d"), total);用这种方法的好处是你不用担心用来存放格式化后数据的缓冲区是否足够大,这些工作由CString类替你完成。
如何将CString转换为char[]VCMFC基础类...
如何将CString转换为char[]VCMFC基础类...我也贴一个:其它数据类型转换为字符串1。
短整型(int)itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制itoa(i,temp,2); ///按二进制方式转换2。
长整型(long)ltoa(l,temp,10);3。
浮点数(float,double)用fcvt可以完成转换,这是MSDN中的例子:int decimal, sign;char *buffer;double source = 3.1415926535;buffer = _fcvt( source, 7, &decimal, &sign );运行结果:source: 3.1415926535 buffer: ‘31415927‘ decimal: 1 sign: 0decimal表示小数点的位置,sign表示符号:0为正数,1为负数4。
CString变量str = "2008北京奥运";buf = (LPSTR)(LPCTSTR)str;5。
BSTR变量BSTR bstrValue = ::SysAllocString(L"程序员");char * buf = _com_util::ConvertBSTRT oString(bstrValue) ;SysFreeString(bstrValue);AfxMessageBox(buf);delete(buf);6。
CComBSTR变量CComBSTR bstrVar("test");char *buf = _com_util::ConvertBSTRT oString(bstrVar.m_st r);AfxMessageBox(buf);delete(buf);7。
_bstr_t变量_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用_bstr_t bstrVar("test");const char *buf = bstrVar;///不要修改buf中的内容AfxMessageBox(buf);8。
c++中cstring转int的方法
c++中cstring转int的方法
在C++中,可以使用`std::stoi`函数将C字符串转换为整数。
`std::stoi`函数是C++标准库中的一个函数,它可以将字符串转换为相应的整数类型。
下面是一个示例代码,演示如何使用`std::stoi`函数将C字符串转换为整数:```cpp
#include <iostream>
#include <cstring>
#include <string>
int main() {
const char* cstr = "12345";
std::string str(cstr);
int num = std::stoi(str);
std::cout << "The integer is: " << num << std::endl;
return 0;
}
```
在上面的代码中,我们首先将C字符串`"12345"`转换为标准字符串类型`std::string`,然后使用`std::stoi`函数将其转换为整数类型。
最后,我们将转换后的整数打印到控制台上。
需要注意的是,如果C字符串无法转换为整数类型,或者转换后的整数超出了该类型的范围,`std::stoi`函数将会抛出异常。
因此,在使用该函数时,需要确保输入的字符串是合法的,并且转换后的整数在预期的范围内。
1。
vc中CString转换为char
CString转换为char *2011-07-09 16:491.char* CStringToChar(CString & str){char temp[MAX_LENGTH];for(int i=0;i<str.GetLength();i++)temp[i]=str[i];temp[i]='\0';return temp;}然后用strcpy();2、(char*)(LPCTSTR)加到前面就可以了3、将CString转换为const char *类型?char* CStringToChar(CString & str) {char temp[MAX_LENGTH];for(int i=0;i<str.GetLength();i++)temp[i]=str[i];temp[i]='\0';return temp;}然后用strcpy();strBuffer.GetBuffer()或者(char*)(LPCTSTR)strBuffer都可以-------------------------------------完整版-------------------------------------------- 方法一:如果不更改字串,用LPCTSTR即可,e.g.:CString strTest = "abcdefg";char* pszTest = (LPCTSTR)strTest;or :char* pszTest = (char*)(LPCTSTR)strTest;方法二:如果要更改字串,用GetBuffer()即可,e.g.:CString strTest = "abcdefg";char* pszTest = strTest.GetBuffer(strTest.GetLength());strTest.ReleaseBuffer();(此时用完后必须调ReleaseBuffer)方法三:使用 _tcscpy( char *strDestination, const char *strSource )也是可以的; strDestination -- char *strSource ---CString方法四:那就是sprintf了,要不memcpy也可以的。
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类型。
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位指针。
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字符串转化和分割
CString字符串转化和分割1、格式化字符串CString s;s.Format(_T("The num is %d."), i);相当于sprintf()2、转为 int转10进制最好⽤_ttoi(),它在 ANSI 编码系统中被编译成_atoi(),⽽在 Unicode 编码系统中编译成_wtoi()。
⽤_tcstoul()或者_tcstol()可以把字符串转化成任意进制的(⽆符号/有符号)长整数。
CString hex = _T("FAB");CString decimal = _T("4011");ASSERT(_tcstoul(hex, 0, 16) == _ttoi(decimal));3、转为 char *3.1 强制类型转换为 LPCTSTR,不能修改字符串LPCTSTR p = s; 或者直接 (LPCTSTR)s;3.2 使⽤ GetBuffer ⽅法不给 GetBuffer 传递参数时它使⽤默认值 0,意思是:“给我这个字符串的指针,我保证不加长它”。
假设你想增加字符串的长度,就必须将你需要的字符空间⼤⼩(注意:是字符⽽不是字节,因为 CString 是以隐含⽅式感知 Unicode 的)传给它。
当调⽤ ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存⼊ CString 对象中。
必须强调⼀点,在 GetBuffer 和 ReleaseBuffer 之间这个范围,⼀定不能使⽤你要操作的这个缓冲的 CString 对象的任何⽅法。
因为ReleaseBuffer 被调⽤之前,该 CString 对象的完整性得不到保障。
LPTSTR p = s.GetBuffer();// do something with pint m = s.GetLength(); // 可能出错!!!s.ReleaseBuffer();int n = s.GetLength(); // 保证正确4、分割字符串4.1 单字符分割AfxExtractSubString(CString& rString, LPCTSTR lpszFullString, int iSubString, TCHAR chSep = '\n');CString csFullString(_T("abcd-efg-hijk-lmn"));CString csTemp;AfxExtractSubString(csTemp, (LPCTSTR)csFullString, 0, '-'); // 得到 abcdAfxExtractSubString(csTemp, (LPCTSTR)csFullString, 1, '-'); // 得到 efgAfxExtractSubString(csTemp, (LPCTSTR)csFullString, 2, '-'); // 得到 hijkAfxExtractSubString(csTemp, (LPCTSTR)csFullString, 3, '-'); // 得到 lmn分隔符可以随便指定:AfxExtractSubString(csTemp, (LPCTSTR)csFullString, 0, 'f'); // 得到 abcd-e4.2 字符串分割利⽤CString的Find⽅法,然后再组成数组。
VC中BSTR、Char和CString类型的转换
VC中BSTR、Char*和CString类型的转换当我们使用 ActiveX 控件编程时,经常需要用到将某个值表示成BSTR 类型。
BSTR是Basic字符串(Basic String)或二进制字符串(binary string)的缩写,它实际上是一个指向宽字符串指针。
COM为了各语言之间进行字符串传递而产生的一个字符串类型!适合哪些场合使用呢。
在COM组件的接口上使用,是COM组件字符串的标准传送格式,相当于VB的String类型。
BSTR跟普通字符串还有一个区别就是他的开头保存有该字符串的长度。
1、char*转换成CString若将char*转换成CString,除了直接赋值外,还可使用CString::format 进行。
例如:char chArray[] = "This is a test";char * p = "This is a test";或LPSTR p = "This is a test"; 或在已定义Unicode应的用程序中TCHAR * p = _T("This is a test");或LPTSTR p = _T("This is a test");CString theString = chArray;theString.format(_T("%s"), chArray);theString = p;2、CString转换成char*若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:方法一,使用强制转换。
例如:CString theString( "This is a test" );LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;方法二,使用strcpy。
例如:CString theString( "This is a test" );LPTSTR lpsz = new TCHAR[theString.GetLength()+1];_tcscpy(lpsz, theString); 需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。
CString使用详解
通过阅读本文你可以学习如何有效地使用CString。
CString 是一种很有用的数据类型。
它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。
不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。
这篇文章就来讨论这些技巧。
使用CString可以让你对字符串的操作更加直截了当。
这篇文章不是CString的完全手册,但囊括了大部分常见基本问题。
这篇文章包括以下内容:1.CString 对象的连接2.格式化字符串(包括int 型转化为CString )3.CString 型转化成int 型4.CString 型和char* 类型的相互转化5.char* 转化成CString6.CString 转化成char* 之一:使用LPCTSTR强制转化7.CString 转化成char* 之二:使用CString对象的GetBuffer方法8.CString 转化成char* 之三: 和控件的接口9.CString 型转化成BSTR 型;10.BSTR 型转化成CString 型;11.VARIANT 型转化成CString 型;12.载入字符串表资源;13.CString 和临时对象;14.CString 的效率;15.总结下面我分别讨论。
能体现出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);所以在Unicode环境下,它的效果就相当于:s.Format(L"%d", total);如果你认为你的程序可能在Unicode的环境下运行,那么开始在意用Unicode 编码。
CString类型转换
CString 类型转换大全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 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里面的值的。
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,int,string,char之间的转换
string str( cstr );
(三) 运算符重载
a) perator=
string是最方便的,几乎可以直接用所有的字符串赋值,包括CString和char*;
CString次之,可以直接用些基本的字符串赋值,包括char*等;
char*只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值建议先设为NULL,以避免野指针,令你抓狂;
—————————————————————
CString与int、char*、char[100]之间的转换- -
CString与int、char*、char[100]之间的转换- -
CString互转int
将字符转换为整数,可以使用atoi、_atoi64或atol。
而将数字转换为CString变量,可以使用CString的Format函数。如
(五) 安全性>
CString > string > char*;
(六) 灵活性
CString > string >char*;
(七) 可移植性
char* = string > CString
strstr
strrstr
strspn find Find
第一个匹配的值 fild_first_of FindOneOf 从后面开始查找 ReserveFind 指定匹配方式 find_if
注:find_if中是把范围内的值挨个代入匹配函数直至返回true
b) 比较
作用 char* string CString 查找指定值(区分大小写) strcmp
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【ZZ】CString/string/char*/char[]/int/float相互
利用MFC进行编程时,我们从对话框中利用GetWindowText得到的字符串是CString类型,CString是属于MFC的类。
而一些标准C/C++库函数是不能直接对CString类型进行操作的,所以我们经常遇到将CString类型转化char*等等其他数据类型的情况。
这里总结备忘于此!
首先要明确,标准C中是不存在string类型的,string是标准C++扩充字符串操作的一个类。
但是我们知道标准C中有string.h这个头文件,这里要区分清楚,此string非彼string。
string.h这个头文件中定义了一些我们经常用到的操作字符串的函数,如:strcpy、strcat、strcmp等等,但是这些函数的操作对象都是char*指向的字符串。
而C++的string类操作对象是string类型字符串,该类重装了一些运算符,添加了一些字符串操作成员函数,使得操作字符串更加方便。
有的时候我们要将string串和char*串配合使用,所以也会涉及到这两个类型的转化问题。
1.CString和string的转化
string str="ksarea";
CString cstr(str.c_str());//或者CString cstr(str.data());初始化时才行
cstr=str.c_str();或者cstr=str.data();
str=cstr.GetBuffer(0); //CString -> string
cstr.format("%s", str.c_str()); //string->CString
cstr.format("%s", str.data()); //string->CString
str = LPCSTR(cstr); //CString->string
2.CString和int的转换
int i=123;
CString str;
str.format("%d",i);//int->CString 其他的基本类型转化类似
i=atoi(str);//CString->int 还有(atof,atol)
3.char*和CString的转换
CString cstr="ksarea";
char* ptemp=cstr.getbuffer(0);
char* str;
strcpy(str,ptemp);//CString->char*
cstr.releasebuffer(-1);
char*str="lovesha";
CString cstr=str;//char*->CString string类型不能直接赋值给CString
至于int与float、string与char*之间的转化可以使用强制转化,或者标准库函数进行。
对于CString与其他类型的转化方法很多,但其实都殊途同归,朝着一个方向即将类型首先转化为char*类型,因为char*是不同类型之间的桥梁。
得到char*类型,转化为其他类型就非常容易了。
常用算法
a)查找
作用char* string CString
find Find
查找指定值strchr
strstr
strrstr
strspn
第一个匹配的值fild_first_of FindOneOf
从后面开始查找ReserveFind
指定匹配方式find_if
注:find_if中是把范围内的值挨个代入匹配函数直至返回true
b)比较
作用char* string CString
分大小写)
CompareNoCase _strnicmp
_stricoll
_strnicoll
注:返回值如果<0则前面的值小于后面的值,反之亦然
c)替换
作用char* string CString
d)插入
作用char*
string CString。