https://blog.csdn.net/lidandan2016/article/details/90260172
lidandan2016
于 2019-05-16 11:27:30 发布
12384
收藏 65
分类专栏: VC
版权
VC
专栏收录该内容
31 篇文章 0 订阅
订阅专栏
string 是使用 STL 时必不可少的类型, 所以是做工程时必须熟练掌握的;
char是从学习 C 语言开始就已经和我们形影不离的了, 有许多 API 都是以 char作为参数输入的. 所以熟练掌握三者之间的转换十分必要.
以下我用简单的图示指出三者之间的关系, 并以标号对应转换的方法.
1 string 转为 CString
CString.format("%s", string.c_str());
2 CString 转为 string
string str(CString.GetBuffer(str.GetLength()));
3 string 转为 char *
char *p=string.c_str();
4 char * 转为 string
string str(char*);
5 CString 转为 char *
strcpy(char, CString,sizeof(char));
6 char * 转为 CString
CString.format("%s", char*);
CString 的 Format 格式化方法是非常好用的.string 的 c_str() 也是非常常用的, 但要注意和 char 转换时, 要把 char 定义成为 const char, 这样是最安全的.
以上函数 UNICODE 编码也没问题:unicode 下照用, 加个_T() 宏就行了, 像这样子_T("%s")
一, 将 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);
方法三, 使用 CString::GetBuffer. 例如:
CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 在这里添加使用 p 的代码
if(p != NULL) *p = _T('\0');
s.ReleaseBuffer();
// 使用完后及时释放, 以便能使用其它的 CString 成员函数
CString str = "ABCDEF";
char *pBuf = str, GetBuffer( 0 );
str.ReleaseBuffer();
二, string 转 char*
string 是 c++标准库里面其中一个, 封装了对字符串的操作
把 string 转换为 char 有 3 种方法:
1.data(), 返回没有"\0"的字符串数组
如:
string str="abc";
char p=str.data();
2.c_str 返回有"\0"的字符串数组
如:string str="gdfd";
char p=str.c_str();
3 copy
比如
string str="hello";
char p[40];
str.copy(p, 5,0); //这里 5, 代表复制几个字符, 0 代表复制的位置
(p+5)='\0'; //要手动加上结束符
cout < < p;
三, 字符串 string 转换为其它数据类型
temp="123456";
1) 短整型 (int)
i = atoi(temp);
2) 长整型 (long)
l = atol(temp);
3) 浮点 (double)
d = atof(temp);
string s; d= atof(s.c_str());
4)BSTR 变量
BSTR bstrValue = ::SysAllocString(L"程序员");
...///完成对 bstrValue 的使用
SysFreeString(bstrValue);
5)CComBSTR 变量
CComBSTR 类型变量可以直接赋值
CComBSTR bstrVar1("test");
CComBSTR bstrVar2(temp);
6)_bstr_t 变量
_bstr_t 类型的变量可以直接赋值
_bstr_t bstrVar1("test");
_bstr_t bstrVar2(temp);
四, Char*转换为 string
如果要把一个 char 转换成 string, 可以使用 string s(char *);
五, string 转 CString
CString.format("%s", string.c_str());
六, char 转 CString
CString.format("%s", char*);
七, CString -> string
string s(CString.GetBuffer());
GetBuffer() 后一定要 ReleaseBuffer(), 否则就没有释放缓冲区所占的空间.
八, CString 互转 int
将字符转换为整数, 可以使用 atoi, _atoi64 或 atol.
而将数字转换为 CString 变量, 可以使用 CString 的 Format 函数. 如
CString s;
int i = 64;
s.Format("%d", i)
_T的作用
_T和_TEXT是一样的,一般情况_T("Kurt")和“Kurt"没有什么区别。但对于UNICODE,一般加上_T.
如果想编译UNICODE版本的软件,则加上_T可以由编译器自动把字符串转换为Unicode的。
char str,或unsigned char str转换成CString
1。直接用构造函数。
CString( LPCTSTR lpch, int nLength );
CString( const unsigned char* psz );
例:char ch[] = _T("this is a sample.");
CString str(ch); //or CString str = ch;
2用Format函数
例: char* test="asfdasfd";
CString str;
str.Format("%s", test);
3强制转换
(CString)char强制转换
CString 转换为char *
LPTSTR 和char *意思同
1使用强制转换
例如:
CString theString( "This is a test" );
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;
2使用CString::GetBuffer
CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 在这里添加使用p的代码
if(p != NULL) *p = _T('\0');
s.ReleaseBuffer();
// 使用完后及时释放,以便能使用其它的CString成员函数。
文章评论