数据类型转换持续汇总中....

本文详细介绍了C++中不同数据类型的转换,包括string到char*,CString到string,以及在Unicode环境下的转换。涉及到的方法包括使用c_str()、GetBuffer()等,同时涵盖int和char之间的转换,对于Unicode环境下的转换,如string到CString,使用了Format方法和GetBuffer()。这些转换在编程中非常实用。

数据类型转换

记录曾经忘记的一些数据类型转换

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜夜夜Best

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值