CString 操作指南转换、

合集下载

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 字符。

mfc类型转换

mfc类型转换

VC++类型转换整理已有84次阅读2009-11-30 16:18标签:类型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与CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。

CString、TCHAR、char转换

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的代码页用来标记与新转换的字符串相关的代码页。

c++中cstring转int的方法

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。

CString, QString, char之间的转换

CString, QString, char之间的转换
const char *c_str2 = str2.toLatin1().data();
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中CString与char和tring的转换

MFC中CString与char和tring的转换
(4) 不过这里还有一点注意事项:就是str.GetBuffer(20)后,str的分配长度为20,即指针p它所指向的buffer只有20字节长,给它赋值时,切不可超过,否则灾难离你不远了;如果指定长度小于原来串长度,如GetBuffer(1),实际上它会分配4个字节长度(即原来串长度);另外,当调用GetBuffer(...)后并改变其内容,一定要记得调用ReleaseBuffer(),这个函数会根据串内容来更新引用内存块的头部信息。
3 拷贝 & 赋值 & "引用内存块" 什么时候释放?
下面演示一段代码执行过程
void Test()
{
CString str("abcd");//str指向一引用内存块(引用内存块的引用计数为1,
长度为4,分配长度为4)
CString a;//a指向一初始数据状态,
a = str; //a与str指向同一引用内存块(引用内存块的引用计数为2,
这两个函数提供了与标准C的兼容转换。在实际中使用频率很高,但却是最容易出错的地方。这两个函数实际上返回的都是指针,但它们有何区别呢?以及调用它们后,幕后是做了怎样的处理过程呢?
(1) LPCTSTR 它的执行过程其实很简单,只是返回引用内存块的串地址。 它是作为操作符重载提供的,
所以在代码中有时可以隐式转换,而有时却需强制转制。如:
temp指向新分配引用内存块的串首地址(新
分配的引用内存块的引用计数为1,长度
为0,分配长度为10)
//同时原引用内存块引用计数减1. 只有str仍
指向原引用内存块(引用内存块的引用计数为1,
长度为4,分配长度为4)
strcpy(temp, "temp"); //a指向的引用内存块的引用计数为1,长度为0,分配长度为10

CString

CString

CStringCString没有基类。

一个CString对象由可变长度的一队字符组成。

CString使用类似于Basic的语法提供函数和操作符。

连接和比较操作符以及简化的内存管理使CString对象比普通字符串数组容易使用。

CString是基于TCHAR数据类型的对象。

如果在你的程序中定义了符号_UNICODE,则TCHAR被定义为类型wchar_t,即16位字符类型;否则,TCHAR被定义为char,即8位字符类型。

在UNICODE方式下,CString对象由16位字符组成。

非UNICODE方式下,CString对象由8位字符组成。

当不使用_UNICODE时,CString是多字节字符集(MBCS,也被认为是双字节字符集,DBCS)。

注意,对于MBCS 字符串,CString仍然基于8位字符来计算,返回,以及处理字符串,并且你的应用程序必须自己解释MBCS的开始和结束字节。

CString对象还具有下列特征:·CString可作为连接操作的结果而增大。

·CString对象遵循“值语义”。

应将CString看作是一个真实的字符串而不是指向字符串的指针。

·你可以使用CString对象任意替换const char*和LPCTSTR函数参数。

·转换操作符使得直接访问该字符串的字符就像访问一个只读字符(C-风格的字符)数组一样。

提示:如果可能的话,应在框架中而不是堆中分配这个CString对象。

这可以节省内存并简化参数的传递。

CString允许两个具有相同值的字符串共享相同的缓冲空间,这有助于你节省内存空间。

但是,如果你初始直接改变该缓冲的内容(不使用MFC),则有可能在无意中改变了两个字符串。

CString提供了两个成员函数CString::LockBuffer 和CString::UnlockBuffer来帮助你保护你的数据。

当你调用LockBuffer时,你就创建了一个字符串的一个拷贝,然后将引用计数设置为-1,这就“加锁”了该缓冲区。

big、CString,int,string,char等数据类型之间的转换

big、CString,int,string,char等数据类型之间的转换

Big,int,string,CString,char*等数据类型之间的转换做项目涉及到好多数据类型之间的转换,稍微总结了一下,共享出来哈一、数据类型转换1、big转int,char(借助大数库miracl.h mirdef.h ms32.lib)big转char:int cotstr(x,str)将大数x转换为字符串strchar转big:int cinstr(x,str)将字符串str转换为大数xbig转int稍微有点麻烦,可以借助char:_itoa(int,char,10)//10表示转换的进制big temp;temp=mirvar(0);incr(temp,int,big)//big=int+temp2、string转CStringCString.format(”%s”,string.c_str());3、char转CStringCString.format(”%s”,char*);4、char转stringstring s(char*);5、string转char*char*p=string.c_str();6、CString转stringstring s(CString.GetBuffer());7、CString互转int将字符转换为整数,可以使用atoi、_atoi64或atol。

而将数字转换为CString变量,可以使用CString的Format函数。

如CString s;int i=64;s.Format(”%d”,i)void CStrDlg::OnButton1(){//TODO:Add your control notification handler code here CStringss=”1212.12〃;int temp=atoi(ss);CString aa;aa.Format(”%d”,temp);AfxMessageBox(”var is”+aa);}sart.Format(”%s”,buf);8、CString互转char*///char*TO cstringCString strtest;char*charpoint;charpoint=”give string a value”;strtest=charpoint;///cstring TO char*charpoint=strtest.GetBuffer(strtest.GetLength());标准C里没有string,char*==char[]==string可以用CString.Format(”%s”,char*)这个方法来将char*转成CString。

string、wstring、cstring、+char、+tchar、int、dword转换方法

string、wstring、cstring、+char、+tchar、int、dword转换方法

int atoi(const char *nptr);
long atol(const char *nptr);
long long atoll(const char *nptr);
long long atoq(const char *nptr);
10》int转char*和string
CString strtest;
char * charpoint;
charpoint="give string a value";
strtest=charpoint; //直接付值
...................................................................
{
string result(cstr.GetLength(),'e');
for (int i=0;i<cstr.GetLength();i++)
{
result[i]=(char)cstr[i];
}
return result;
}
5》string转char *
a)char *p = string.c_str();
具体问题具体分析,浮云啊,一切皆是浮云.....
以下摘录自网络:
..............................................................
《C++标准函数库》中说的
有三个函数可以将字符串的内容转换为字符数组和C—string
1.data(),返回没有”/0“的字符串数组
string 转 CString

Cstring转charstringint等数据类型的方法

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 类型转换大全

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),而后者相反。

C++语言中CString对象的连接和格式化字符串

C++语言中CString对象的连接和格式化字符串

C++语言中CString对象的连接和格式化字符串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类型方便性特点的一个方面就是字符串的连接,使用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类替你完成。

CString类型转换

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里面的值的。

VC之CString,wchar_t,int,string,char之间的转换

VC之CString,wchar_t,int,string,char之间的转换

作用 char* string CString 查找指定值 _strset
_strnset
replace
replace_copy
replace_copy_if
replace_if Replace
d) 插入
作用 char* string CString 查找指定值 insert Insert
Right
Truncate
g) 移除
作用 char* string CString 移除部份值 remove Remove 移除空白值 RemoveBlanks
注:此为ATL提供,非C函数 remove_if Trim
TrimLeft
TrimRig
h) 转换大小写
作用 char* string CString 转换大小写 _strlwr
strcat( psz, cstr );//合法
strcat( psz, str );//非法,由此可见,CString可自动转换为const char*,而string不行
c) operator +=
string是最强大的,几乎可以与所有的字符串变量+=,包括CString和char*;
char*只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值建议先设为NULL,以避免野指针,令你抓狂;
举例:
char *psz = NULL;
psz = new char[10]; //当然,以上的直接写成char *psz = new char[10];也是一样
3,CString -> string

CStringQString转换

CStringQString转换
char *CharString;
CharString=new char(origsize);
wcstombs_s(&convertedChars, CharString, origsize, wCharString , _TRUNCATE);
cout << CharString << endl;
QString GB_To_Utf8(char *strText)
{
return QString::fromLocal8Bit(strText);
}
如何将QString转换为char *或者相反
How can I convert a QString to char* and vice versa ?(trolltech)
QString string = QString(QLatin1String(c_str2)) ;
还有其他多种方法:
方法一 -----------------------------------------
#define G2U(s) ( QTextCodec::codecForName("GBK")->toUnicode(s) )
BSTR bstr_str;
qstring q_str((QChar*)bstr_str, wcslen(bstr_str))
bstr_str = SysAllocString(q_str.utf16())
remember use SysFreeString on BSTR
qstring<->LPCSTR
#define U2G(s) ( QTextCodec::codecForName("GBK")->fromUnicode(s) )

如何将CString转换为char_类型

如何将CString转换为char_类型

如何将CString转换为char_类型1、GetBuffer函数使用CString::GetBuffer函数。

char *p;CString str="hello";p=str.GetBuffer(str.GetLength());str.ReleaseBuffer();将CString转换成char * 时CString str("aaaaaaa");strcpy(str.GetBuffer(10),"aa");str.ReleaseBuffer();当我们需要字符数组时调用GetBuffer(int n),其中n为我们需要的字符数组的长度.使用完成后一定要马上调用ReleaseBuffer();还有很重要的一点就是,在能使用const char *的地方,就不要使用char *2、memcpyCString mCS=_T("cxl");char mch[20];memcpy(mch,mCS,20);3、用LPCTSTR强制转换:尽量不使用char *ch;CString str;ch=(LPSTR)(LPCTSTR)str;CString str = "good";char *tmp;sprintf(tmp,"%s",(LPTSTR)(LPCTSTR)str);4、CString Msg;Msg=Msg+"abc";LPTSTR lpsz;lpsz = new TCHAR[Msg.GetLength()+1];_tcscpy(lpsz, Msg);char * psz;strcpy(psz,lpsz);CString类向const char *转换char a[100];CString str("aaaaaa");strncpy(a,(LPCTSTR)str,sizeof(a));或者如下:strncpy(a,str,sizeof(a));以上两种用法都是正确地. 因为strncpy的第二个参数类型为const char *.所以编译器会自动将CString类转换成const char *.CString转LPCTSTR (const char *)CString cStr;const char *lpctStr=(LPCTSTR)cStr;LPCTSTR转CStringLPCTSTR lpctStr;CString cStr=lpctStr;将char*类型的变量赋给CString型的变量可以直接赋值,如:CString myString = "This is a test";也可以利用构造函数,如:CString s1("Tom");将CString类型的变量赋给char []类型(字符串)的变量1、sprintf()函数CString str = "good";char tmp[200] ;sprintf(tmp, "%s",(LPCSTR)str);(LPCSTR)str这种强制转换相当于(LPTSTR)(LPCTSTR)strCString类的变量需要转换为(char*)的时,使用(LPTSTR)(LPCTSTR)str然而,LPCTSTR是const char *,也就是说,得到的字符串是不可写的!将其强制转换成LPTSTR去掉const,是极为危险的!一不留神就会完蛋!要得到char *,应该用GetBuffer()或GetBufferSetLength(),用完后再调用ReleaseBuffer()。

mfc 数字转字符串

mfc 数字转字符串

mfc 数字转字符串MFC是指Microsoft Foundation Classes,它是一套由Microsoft提供的C++类库。

MFC提供了大量的类来实现GUI程序开发,是Windows程序开发的主要工具之一。

在MFC开发中,经常需要进行数字与字符串之间的相互转换。

其中,将数字转换成字符串是比较常见的需求。

MFC提供了两种方法来实现数字转换字符串,分别是CString::Format和_itoa函数。

1. 使用CString::Format方法CString::Format是MFC中CString类提供的一个方法,它可以将数字按照指定的格式转换成字符串。

例如,如果要将一个整型数字num 转换成字符串,可以写成如下代码:```int num = 123;CString str;str.Format("%d", num);```在这里,"%d"是一个控制字符串,表示将整型数字转换成十进制字符串。

如果要将num转换成十六进制字符串,可以将控制字符串改为"%X"。

当然,控制字符串的格式与所要转换的数据类型有关,具体格式可以在MFC官方文档中查阅。

2. 使用_itoa函数_itoa函数是在C语言中提供的函数,MFC中也可以使用。

它可以将整型数字转换成指定进制的字符串。

例如,将一个十进制数字num转换成十六进制字符串可以写成如下代码:```int num = 123;char str[10];_itoa(num, str, 16);```在这里,第三个参数指定了进制数,即将num转换成16进制字符串。

此外,_itoa函数的返回值是一个指向结果字符串的指针,可以直接使用。

总结在MFC开发中,数字转换字符串是非常常见的需求。

除了上述两种方法外,还可以使用其他方法,例如使用stringstream类等。

在选择合适的方法时,需要根据具体场景进行选择,以达到最佳效果。

CString转char

CString转char

CString转char1.传给未分配内存的const char* (LPCTSTR)指针.CString cstr(asdd);const char* ch = (LPCTSTR)cstr;ch指向的地址和cstr相同。

但由于使用const保证ch不会修改,所以安全.2.传给未分配内存的指针.CString cstr = "ASDDSD";char *ch = cstr.GetBuffer(cstr1.GetLength() + 1);cstr.ReleaseBuffer();//修改ch指向的值等于修改cstr里面的值.//PS:用完ch后,不用delete ch,因为这样会破坏cstr内部空间,容易造成程序崩溃.3.第二种用法。

把CString 值赋给已分配内存的char *。

CString cstr1 = "ASDDSD";int strLength = cstr1.GetLength() + 1;char *pValue = new char[strLength];strncpy(pValue, cstr1, strLength);4.第三种用法.把CString 值赋给已分配内存char[]数组.CString cstr2 = "ASDDSD";int strLength1 = cstr1.GetLength() + 1;char chArray[100];memset(chArray,0, sizeof(bool) * 100); //将数组的垃圾内容清空.strncpy(chArray, cstr1, strLength1);CString中有个LPCTSTR类型转换运算符。

所以我做以下运算:_itoa(m_num3,(char *)((LPCTSTR)str),10)。

不幸的是,当str的大小变化时,debug报错。

错误的原因在于,当写入str的字符数发生变化时,会重新分配str所占空间,这时CString类内部的字符指针就无效了,故报错。

CString的使用

CString的使用

CString的使⽤⾸先理清⼀下CString的基本概念CString就是对⼀个⽤来存放字符串的缓冲区和对施加于这个字符串的操作封装。

也就是说,CString⾥需要有⼀个⽤来存放字符串的缓冲区,并且有⼀个指针指向该缓冲区,该指针就是LPTSTR m_pchData。

但是有些字符串操作会增建或减少字符串的长度,因此为了减少频繁的申请内存或者释放内存,CString会先申请⼀个⼤的内存块⽤来存放字符串。

这样,以后当字符串长度增长时,如果增加的总长度不超过预先申请的内存块的长度,就不⽤再申请内存。

当增加后的字符串长度超过预先申请的内存时,CString先释放原先的内存,然后再重新申请⼀个更⼤的内存块。

同样的,当字符串长度减少时,也不释放多出来的内存空间。

⽽是等到积累到⼀定程度时,才⼀次性将多余的内存释放。

还有,当使⽤⼀个CString对象a来初始化另⼀个CString对象b时,为了节省空间,新对象b并不分配空间,它所要做的只是将⾃⼰的指针指向对象a的那块内存空间,只有当需要修改对象a或者b中的字符串时,才会为新对象b申请内存空间,这叫做写⼊复制技术(CopyBeforeWrite)。

那么CString是否和我们平时常见的字符串空间⼀样呢?答案是否定的,上⾯说了,变量之间赋值是不会⽴刻分配空间的,除⾮⼀个变量内容发⽣变化,否则只是引⽤技术增加。

我么看了CString结构体的定义之后会更加明⽩这个问题struct CStringData{long nRefs; // 引⽤计数int nDataLength; // 实际数据的长度包括结束符int nAllocLength; // 总共分配的内存空间// TCHAR data[nAllocLength]TCHAR* data() // TCHAR* to managed data{ return (TCHAR*)(this+1); }};看了这个结构,我想对于上⾯的叙述应该觉得本该如此了吧。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CString 操作指南原著:Joseph M. Newcomer翻译:littleloach原文出处:codeproject:CString Management通过阅读本文你可以学习如何有效地使用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.总结下面我分别讨论。

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类替你完成。

格式化是一种把其它不是字符串类型的数据转化为CString类型的最常用技巧,比如,把一个整数转化成CString类型,可用如下方法:CString s;s.Format(_T("%d"), total);我总是对我的字符串使用_T()宏,这是为了让我的代码至少有Unicode的意识,当然,关于Unicode的话题不在这篇文章的讨论范围。

_T()宏在8位字符环境下是如下定义的:#define _T(x) x // 非Unicode版本(non-Unicode version)而在Unicode环境下是如下定义的:#define _T(x) L##x // Unicode版本(Unicode version)所以在Unicode环境下,它的效果就相当于:s.Format(L"%d", total);如果你认为你的程序可能在Unicode的环境下运行,那么开始在意用Unicode 编码。

比如说,不要用sizeof() 操作符来获得字符串的长度,因为在Unicode环境下就会有2倍的误差。

我们可以用一些方法来隐藏Unicode的一些细节,比如在我需要获得字符长度的时候,我会用一个叫做DIM的宏,这个宏是在我的dim.h文件中定义的,我会在我写的所有程序中都包含这个文件:#define DIM(x) ( sizeof((x)) / sizeof((x)[0]) )这个宏不仅可以用来解决Unicode的字符串长度的问题,也可以用在编译时定义的表格上,它可以获得表格的项数,如下:class Whatever { ... };Whatever data[] = {{ ... },...{ ... },};for(int i = 0; i < DIM(data); i++) // 扫描表格寻找匹配项。

这里要提醒你的就是一定要注意那些在参数中需要真实字节数的API函数调用,如果你传递字符个数给它,它将不能正常工作。

如下:TCHAR data[20];lstrcpyn(data, longstring, sizeof(data) - 1); // WRONG! lstrcpyn(data, longstring, DIM(data) - 1); // RIGHTWriteFile(f, data, DIM(data), &bytesWritten, NULL); // WRONG! WriteFile(f, data, sizeof(data), &bytesWritten, NULL); // RIGHT造成以上原因是因为lstrcpyn需要一个字符个数作为参数,但是WriteFile却需要字节数作为参数。

同样需要注意的是有时候需要写出数据的所有内容。

如果你仅仅只想写出数据的真实长度,你可能会认为你应该这样做:WriteFile(f, data, lstrlen(data), &bytesWritten, NULL); // WRONG 但是在Unicode环境下,它不会正常工作。

正确的做法应该是这样:WriteFile(f, data, lstrlen(data) * sizeof(TCHAR), &bytesWritten, NULL); // RIGHT因为WriteFile需要的是一个以字节为单位的长度。

(可能有些人会想“在非Unicode的环境下运行这行代码,就意味着总是在做一个多余的乘1操作,这样不会降低程序的效率吗?”这种想法是多余的,你必须要了解编译器实际上做了什么,没有哪一个C或C++编译器会把这种无聊的乘1操作留在代码中。

在Unicode环境下运行的时候,你也不必担心那个乘2操作会降低程序的效率,记住,这只是一个左移一位的操作而已,编译器也很乐意为你做这种替换。

)使用_T宏并不是意味着你已经创建了一个Unicode的程序,你只是创建了一个有Unicode意识的程序而已。

如果你在默认的8-bit模式下编译你的程序的话,得到的将是一个普通的8-bit的应用程序(这里的8-bit指的只是8位的字符编码,并不是指8位的计算机系统);当你在Unicode环境下编译你的程序时,你才会得到一个Unicode的程序。

记住,CString 在Unicode 环境下,里面包含的可都是16位的字符哦。

3、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));4、CString 型和char* 类型的相互转化这是初学者使用CString 时最常见的问题。

有了C++ 的帮助,很多问题你不需要深入的去考虑它,直接拿来用就行了,但是如果你不能深入了解它的运行机制,又会有很多问题让你迷惑,特别是有些看起来没有问题的代码,却偏偏不能正常工作。

比如,你会奇怪为什么不能写向下面这样的代码呢:CString graycat = "Gray" + "Cat";或者这样:CString graycat("Gray" + "Cat");事实上,编译器将抱怨上面的这些尝试。

为什么呢?因为针对CString 和LPCTSTR数据类型的各种各样的组合,“ +” 运算符被定义成一个重载操作符。

而不是两个LPCTSTR 数据类型,它是底层数据类型。

你不能对基本数据(如int、char 或者char*)类型重载C++ 的运算符。

你可以象下面这样做:CString graycat = CString("Gray") + CString("Cat");或者这样:CString graycat = CString("Gray") + "Cat";研究一番就会发现:“ +”总是使用在至少有一个CString 对象和一个LPCSTR 的场合。

注意,编写有Unicode 意识的代码总是一件好事,比如:CString graycat = CString(_T("Gray")) + _T("Cat");这将使得你的代码可以直接移植。

char* 转化为CString现在你有一个char* 类型的数据,或者说一个字符串。

怎么样创建CString 对象呢?这里有一些例子:char * p = "This is a test";或者象下面这样更具有Unicode 意识:TCHAR * p = _T("This is a test")或LPTSTR p = _T("This is a test");你可以使用下面任意一种写法:CString s = "This is a test"; // 8-bit onlyCString s = _T("This is a test"); // Unicode-awareCString s("This is a test"); // 8-bit onlyCString s(_T("This is a test")); // Unicode-awareCString s = p;CString s(p);用这些方法可以轻松将常量字符串或指针转换成CString。

相关文档
最新文档