数据类型转换
记录曾经忘记的一些数据类型转换
string转char*
string 是标准c++的类,前面需要加 std:: 作用域。
CString是微软的一个封装库,是给MFC用的。
//法1
std::string str = "string";
char* chr = const_cast<char*>(str.c_str());
//法2
std::string str = "some string" ;
char *cstr = &str[0];
//法3
std::string str = "string";
const char *cstr = str.c_str();
char*转string
一般来说其实直接赋值就行
char c[] = "this is a char array";
const char* t = "const char";
string s = t;
string ss = c;
string转CString
CString.format("%s", string.c_str());
//(用c_str()确实比data()要好. )
Cstring转string
string s(CString.GetBuffer());
//(GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
CString转char*
CString strSource;//宣告CString
char* charSource; //宣告char*
//法1:
charSource = (char*)strSource.GetBuffer(0);
//法2:
charSource =(char*)strSource.GetBuffer(strSource.GetLength());
//法3:
charSource = (char*)(LPCTSTR)strSource;
char转CString
char chTest[] = "12345";
CString str1,str2;
str1.Format("%s", chTest); //法1
str2 = chTest; //法2
CString转char
CString tmp{_TEXT("123")};
char *ch = tmp.GetBuffer();
CString theString(_T("Char test "));
char *ch = (LPTSTR)(LPCTSTR)theString;
LPTSTR lpsz = (LPTSTR)(LPCTSTR)theString;
LPTSTR 就是 char* 在ansi中。
LPCTSTR 就是const char* 在ansi中。
unicode下各种类型转换CString、string
把最近用到的各种unicode下类型转换总结了一下:
1、string转CString
string a=”abc”;
CString str=CString(a.c_str());
或str.format(“%s”, a.c_str())
2、int转CString
Int a;
CString Cstr;
Cstr.Format(_T(“%d”),a);
3、char 转 CString
CString.format(“%s”, char*);
例:
char szPath[];
CString Cstr;
Cstr.Format(_T(“%s”),szPath);
4、CString转string
CString C_str=_T("abc");
string str((LPCSTR)CStringA(C_str));
或string str=CStringA(C_str);
或通过char*中转
CString m_str(_T(“qwerg”));
char *chr=new char[m_str.GetLength()+1];
WideCharToMultiByte(CP_ACP,0,m_str.GetBuffer(),-1,chr,m_str.GetLength()+1,NULL,NULL);
string str=chr;
或者CString C_str = _T(“ooqoqoq”);
// setlocale(LC_ALL, “chs”);
char *p = new char[C_str.GetLength()+1];
wcstombs(p,C_str,C_str.GetLength()+1);
string str = p;
用下面代码检测:
MessageBox((CString)str.c_str());
5、CString转const char*
CString a=_T(“ ”);
CStringA b(a);
const char *c=new char(50);
c=b.GetString();
或者:
CString FilePath=_T(“ ”);
int len=WideCharToMultiByte( CP_ACP,0,FilePath.AllocSysString(),FilePath.GetLength(),NULL,0,NULL,NULL);
char * pAscii =new char[len];
len=WideCharToMultiByte(CP_ACP,0,FilePath.AllocSysString(),FilePath.GetLength(),pAscii,len+1,NULL,NULL);
pAscii[len]=0;
const char* path=(const char*)pAscii;
6、CString转char*
CString strPath = _T(“啊啊啊”);
int nLength = strPath.GetLength();
int nBytes = WideCharToMultiByte(CP_ACP,0,strPath,nLength,NULL,0,NULL,NULL);
char* VoicePath = new char[ nBytes + 1];
memset(VoicePath,0,nLength + 1);
WideCharToMultiByte(CP_OEMCP, 0, strPath, nLength, VoicePath, nBytes, NULL, NULL);
VoicePath[nBytes] = 0;
7、CString转int
CString str=_T(“123”);
int b=_ttoi(str);
或者转成string,再转int
8、char 转 string
string s(char *);
9、char[]转LPWSTR
直接强制转换
10、string转char*
把string转换为char* 有3中方法:
1.data
如:
string str=“abc”;
char *p=str.data();
2.c_str
如: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;
11、string转int
string num;
int a=atoi(num.c_str());
12 、int转string
#include
stringstream ss;
int n = 123;
string str;
ss<<n;
ss>>str
本文详细介绍了C++中不同数据类型的转换,包括string到char*,CString到string,以及在Unicode环境下的转换。涉及到的方法包括使用c_str()、GetBuffer()等,同时涵盖int和char之间的转换,对于Unicode环境下的转换,如string到CString,使用了Format方法和GetBuffer()。这些转换在编程中非常实用。
1万+

被折叠的 条评论
为什么被折叠?



