常见类型转换
1.1、CString互转int
(1)将字符转换为int,可以使用atoi、_atoi64或atol。
(2)将int转换为CString变量,可以使用CString的Format函数。如
CString s;
int i = 64;
s.Format(”%d”, i)
1.2、CString互转char*
(1)将char * 转换为CString
CString strtest;
char * charpoint;
charpoint=”give string a value”;
strtest=charpoint;//令指针指向CString数据
或strtest.format(”%s”, charpoint);
(2)将CString转换为char *
CString strtest;
char charpoint =(LPSTR)(LPCTSTR) strtest;//不能直接转换为非常量指针(LPTSTR-[const] char))
或char * charpoint;
charpoint=strtest.GetBuffer(strtest.GetLength());//得到指向缓冲区的非常量指针
if(p != NULL) *p = _T(’\0’);
s.ReleaseBuffer(); // 使用完及时释放,以便使用其它CString成员函数
1.3、CString转换 char[100]
(1)将char[100] 转换为 CString
char a[100];
CString str(”a”);
(2)将CString 转换为 char[100]
strncpy(a,(LPCTSTR)str,sizeof(a));//拷贝字符串,检查空间是否足够
或memcpy(a,str,str.GetLength());//内存赋值函数
1.4、CString互转string
(1)将CString转换为string
string s(CString.GetBuffer());
或(LPCTSTR)CString.
(2)将String转换为CString
CString.format(”%s”, string.c_str());
const char * c_str()const; //获取等效的C字符串
生成一个以空终止的字符序列(CString),其内容与字符串对象相同,并将其作为指向字符数组的指针返回,会自动附加一个终止的空字符。
const char * data()const; //获取字符串数据
返回指向与字符串内容相同的字符数组的指针,没有附加任何终止的空字符。
c_str()字符串后有’\0’,而data()没有。
2、注:以下字符串均指char 类型
atoi --将字符串转换成整形,从数字或正负号开始转换,一直到非数字为止
itoa --将整形转换成字符串
atof --字符串转换成浮点型
atol —字符串转换成长整形
gcvt—浮点型转换成字符串(四舍五入)
strtod—字符串转换成浮点型
strtol—字符串转换成长整形
strtoul–字符串转换成无符号长整形
toascii—将整形转换成合法的ASCII码字符
_ttoi—可以将CString转换成整形
_itot_s—将int转换成char
3.1、string字符串转int
(1)N = stringToNum(str);//需要#include
(2)在中实现的
int stoi (const string& str, size_t* idx = 0, int base = 10);//idx返回第一个非数字的指针索引,base默认10进制
long stol、unsigned long stoul、long long stoll、unsigned long long stoull、float stof、double stod、long double stold
(3)stringstream//#include
string a = “123.32”;
double res;
stringstream ss;//进行流的输入输出操作
ss << a;
ss >> res;
3.2、int转string字符串
(1)stringstream(多次使用需要使用clear()清除
int N = 10;
stringstream ss;//#include
string str;
ss << N;
ss >> str;
(2)string = std::to_string(N)方法
只需包含头文件即可
3.3、char字符串转string字符串
(1)char* p = “hello”;
string s§;
s = p;
(2)String类的valueOf()方法,将字符(char)数组转换为字符串
char[] cc={‘a’,‘b’,‘c’};
ss=String.valueOf(cc);
这时ss=“abc”;
4.1、char字符串转int
(1)char a[10] = {“255”};
int b;
sscanf(a,"%d",&b);
char a[10] = {“ff”};//十六进制
int b;
sscanf(a,"%x",&b);
char str[]=”123.321”;
double a;
sscanf(str,”%lf”,&a);
(2)另外也可以用atoi(),atol(),atof()
4.2、int转char字符串
(1)使用sprintf:#include
char c[100];
int k=255;
sprintf(c,"%d",k);//d是有符号10进制数,u是无符号10进制
double a=123.321;
sprintf(c,”%.3lf”,a);
sprintf(c,"%x",k);//转换成16进制,如果大写可以用X,8进制是o
//c包含"ff" c[0]=‘f’ c[1]=‘f’
(2)itoa貌似跟平台有关,不建议使用。
4.3、string字符串转char字符串
(1)string str(“test”);
const char* p = str.data();//记得要加const或者强制类型转换成(char*)
const char* p = str.c_str();
(2)char p[10];
std::size_t length = str.copy(p,5,0);//从第0个开始复制5个,返回有效复制的数量,需要在p最后添加’\0’
char * cstr = new char [str.length()+1];
std::strcpy (cstr, str.c_str());
或者逐个复制
(3) String类的toCharArray()方法,将字符串转为字符(char)数组
String ss=“abc”;
char[] cc;
cc=ss.toCharArray();
这时cc={‘a’,‘b’,‘c’};