您的位置:首页 > 其它

CString/String/int/wchar/char类型相转 CString各种类型相互转换小结

2012-11-18 10:50 856 查看
1.头文件中要定义宏;

#define UNICODE

#define _UNICODE

2.char转换成wchar

const char *pFilePathName = "c:\\aa.dll";

int nLen = strlen(pFilePathName) + 1;

int nwLen = MultiByteToWideChar(CP_ACP, 0, pFilePathName, nLen, NULL, 0);

TCHAR lpszFile[256];

MultiByteToWideChar(CP_ACP, 0, pFilePathName, nLen, lpszFile, nwLen);

3.wchar转换成char

char *pFilePathName;

TCHAR lpszFile[256];

_tcscpy(lpszFile, _T("c:\\aa.dll"));

int nLen = wcslen(wstr)+1;

WideCharToMultiByte(CP_ACP, 0, lpszFile, nLen, pFilePathName, 2*nLen, NULL, NULL);

1 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 转 string

string s(CString.GetBuffer());

1,string -> CString

CString.format("%s", string.c_str());

用c_str()确实比data()要好.

2,char -> string

string s(char *);

你的只能初始化,在不是初始化的地方最好还是用assign().

3,CString -> string

string s(CString.GetBuffer());

GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.

《C++标准函数库》中说的

有三个函数可以将字符串的内容转换为字符数组和C—string

1.data(),返回没有”\0“的字符串数组

2,c_str(),返回有”\0“的字符串数组

3,copy()

CString互转int

将字符转换为整数,可以使用atoi、_atoi64或atol。

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

CString s;

int i = 64;

s.Format("%d", i)

Format函数的功能很强,值得你研究一下。

void CStrDlg::OnButton1()

{

// TODO: Add your control notification handler code here

CString

ss="1212.12";

int temp=atoi(ss);

CString aa;

aa.Format("%d",temp);

AfxMessageBox("var is " + aa);

}

sart.Format("%s",buf);

CString互转char*

///char * TO cstring

CString 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。要把CString转成char *,用操作符(LPCSTR)CString就可以了。

CString转换 char[100]

char a[100];

CString str("aaaaaa");

strncpy(a,(LPCTSTR)str,sizeof(a));

2 CString类型的转换成int

CString类型的转换成int

将字符转换为整数,可以使用atoi、_atoi64或atol。

//CString aaa = "16" ;

//int int_chage = atoi((lpcstr)aaa) ;

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

CString s;

int i = 64;

s.Format("%d", i)

Format函数的功能很强,值得你研究一下。

如果是使用char数组,也可以使用sprintf函数。

//CString ss="1212.12";

//int temp=atoi(ss);

//CString aa;

//aa.Format("%d",temp);

数字->字符串除了用CString::Format,还有FormatV、sprintf和不需要借助于Afx的itoa

3 char* 在装int

#include <stdlib.h>

int atoi(const char *nptr);

long atol(const char *nptr);

long long atoll(const char *nptr);

long long atoq(const char *nptr);

4 CString,int,string,char*之间的转换

string aa("aaa");

char *c=aa.c_str();

cannot convert from 'const char *' to 'char *'

const char *c=aa.c_str();

5 CString,int,string,char*之间的转换

string.c_str()只能转换成const char *,

要转成char *这样写:

string mngName;

char t[200]; memset(t,0,200); strcpy(t,mngName.c_str());

UpdateData(TRUE)

//比如CEDIT 控件连接的变量叫m_strEditString;

if (m_strEditString.GetLength()>=500)

{

MessageBox(_T("长度不够"_,_T(""),MB_ICONSTOP)//ERROR

}

else

{

strcpy(st,m_strEditString.GetBuffer(0));

}

//以下是转换

1、CString::GetBuffer(0);//取得CString的char*

2、int intv=atoi(CString::GetBuffer(0));//CString to Int

3、float floatv=(float)atof(CString::GetBuffer(0));//CString to float

4、long longvv=atol(CString::GetBuffer(0));//CString to Long

5、double doublev=atof(CString::GetBuffer(0));//CString to Double

6、CString::Format(_T("%d,%f,%ld,%lf,%c,%s"),int,float,long,double,char,char*)//各类型到CString

4.char*和CString转换

CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓冲区长度。有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数和缓冲区长度被巧妙隐藏。

(1) char*转换成CString

  若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:

char chArray[] = "Char test";

TCHAR * p = _T("Char test");( 或LPTSTR p = _T("Char test");)

CString theString = chArray;

theString.Format(_T("%s"), chArray);

theString = p;

(2) CString转换成char*

  若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:

  方法一,使用强制转换。例如:

CString theString( (_T("Char test "));

LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;

  方法二,使用strcpy。例如:

CString theString( (_T("Char test "));

LPTSTR lpsz = new TCHAR[theString.GetLength()+1];

_tcscpy(lpsz, theString);

  需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。

  方法三,使用CString::GetBuffer。

如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。如果你只是打算修改字符或者截短字符串,例如:

CString s(_T("Char test "));

LPTSTR p = s.GetBuffer();

LPTSTR dot = strchr(p, ''.'');

// 在这里添加使用p的代码

if(p != NULL)

*p = _T('\0');

s.ReleaseBuffer(); // 使用完后及时释放,以便能使用其它的CString成员函数

在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。

5.CString 转为 int

将字符转换为整数,可以使用atoi、_atoi64或atol。

CString aaa = "16" ;

int int_chage = atoi(aaa) ;

得到 int_chage = 16

int atoi(const char *nptr);

long atol(const char *nptr);

long long atoll(const char *nptr);

long long atoq(const char *nptr);

6.int 转为 CString

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

CString s;

int i = 64;

s.Format("%d", i)

 itoa是广泛应用的非标准C语言扩展函数。由于它不是标准C语言函数,所以不能在所有的编译器中使



用。但是,大多数的编译器(如Windows上的)通常在<stdlib.h>头文件中包含这个函数。在<stdlib.h>中与之有相反功能的函数是atoi。功能:把一整数转换为字符串。

CString与其他类型的转换

这里只是介绍了很常见方法,还有其他方法也可以实现相关的功能!

1、字符串与数的转换:

atof(字符串->double,int,long),itoa(int->字符串),ltoa(long int->字符串)

double->CString的方法:CString::Format("%d", &dX);

2、CString to char*

//经过类型强制转换,可以将CString类型转换成char*,例如:

CString cStr = "Hello,world!";

char *zStr = (char*)(LPCTSTR)cStr;

当然,这只是最快捷的一种方法。因为CString自带一个函数可以将CString对象转换成const char*,也就是LPCTSTR。

3、char* to CString

//char*类型可以直接给CString,完成自动转换,例如:

char *zStr = "Hello,world!";

CString cStr = zStr;

4、CString to LPCSTR

//将CString转换成LPCSTR,需要获得CString的长度CString cStr=_T("Hello,world!");

int nLen = cStr.GetLength();

LPCSTR lpszBuf = cStr.GetBuffer(nLen);

5、CString to LPSTR

//这个和第4个技巧是一样的,例如:

CString cStr = _T("Hello,world!");

int nLen = str.GetLength();

LPSTR lpszBuf = str.GetBuffer(nLen);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: