码迷,mamicode.com
首页 > 编程语言 > 详细

c++数据类型间的转换

时间:2015-11-23 14:56:12      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:数据类型转换

数据类型的转换
 
Int 转 string
1、
//char *itoa( int value, char *string,int radix);
 // 原型说明:
 // value:欲转换的数据。
 // string:目标字符串的地址。
 // radix:转换后的进制数,可以是10进制、16进制等。
 // 返回指向string这个字符串的指针
int aa = 30;
char c1[8];
char c2[8];
char c3[8];
string str1;
string str2;
string str3;
_itoa(aa, c1, 8);
_itoa(aa, c2, 10);
_itoa(aa, c3, 16);
str1 = c1;
str2 = c2;
str3 = c3;
cout << "输出八进制:" << str1 << endl;//输出36
cout << "输出十进制:" << str2 << endl;//输出30
cout << "输出十六进制:" << str3 << endl;//输出le
 
2、
// int sprintf( char *buffer, const char *format, [ argument] … );
//参数列表
// buffer:char型指针,指向将要写入的字符串的缓冲区。
// format:格式化字符串。
// [argument]...:可选参数,可以是任何类型的数据。
// 返回值:字符串长度(strlen)
 
int aa = 30;
char c1[8];
char c2[8];
char c3[8];
int length1 = sprintf(c1, "%o", aa);
int length2 = sprintf(c2, "%d", aa);
int length3 = sprintf(c3, "%X", aa);
cout << c1 << endl; // 36
cout << c2 << endl; // 30
cout << c3 << endl; // 1E
 
 
3、
头文件   #include"sstream"
int aa = 30;
stringstream ss;
ss << aa;
string str1 = ss.str();
cout << str1 << endl; // 30
 
string str2;
ss >> str2;
cout << str2 << endl; // 30
 
 
 
String 转 int
1、
string str = "123";
int a = atoi(str.c_str());
 
2、
stringstream ss;
string str = "30";
ss << str;
int a;
ss>>a;
cout << a << endl;
 
3、
int i;
string str = "17";
char* ch = (char*)str.c_str();
sscanf(ch, "%o", &i);
cout << "八进制:" << i << endl; // 15
 
sscanf(ch, "%d", &i);
cout <<"十进制:"<< i << endl; // 17
 
sscanf(ch, "%X", &i);
cout << "十六进制:" << i << endl; // 23
 
 
Char[] 转 int 
char a[10]="100";
int b = atoi(a);
cout << b+1 << endl;
 
Char* 转 int 
char *a= "100";
int b = atoi(a);
cout << b+1 << endl;
 
String 转 double
string a = "100.1";
double b = atof(a.c_str());
cout << b+1 << endl;
 
Char* 转 double
char *a= "100.1";
double b = atof(a);
cout << b+1 << endl;
 
Char[] 转 double
char a[]= "100.1";
double b = atof(a);
cout << b+1 << endl;
 
Char[] 转 char*
char c[33] = "nihao";
char* p = c;
 
Char* 转char[]
char* p = "jianren";
char c1[22];
strcpy_s(c1, p);
cout << c1 << endl;
 
注意,与char*不同的是,string不一定以NULL(‘\0‘)结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*。
String 转 const char*
string s1 = "abcdeg";
const char *k = s1.c_str();
const char *t = s1.data();
cout << k << endl<< t << endl;
 
如上,都可以输出。内容是一样的。但是只能转换成const char*,如果去掉const编译不能通过。那么,如果要转换成char*,可以用string的一个成员函数copy实现。
 
 
String 转 char*
1、
string str = "hello";
int len = str.length();
char *p;
p = (char*)malloc(sizeof(sizeof(char*)*(len + 1)));
str.copy(p, len, 0); //这里5,代表复制几个字符,0代表复制的位置
*(p + len) = ‘\0‘; //要手动加上结束符
cout << p << endl;
 
2、
string str = "abc";
char *p = (char*)str.data();
cout << p << endl;
 
3、
string str = "gdfd";
char *p = (char*)(str.c_str());
cout << p << endl;
 
 
string转换成char[]
这个由于我们知道string的长度,可以根据length()函数得到,又可以根据下标直接访问,所以用一个循环就可以赋值了
string pp = "dagah";
char p[8];
int i;
for( i=0;i<pp.length();i++)
p[i] = pp[i];
p[i] = ‘\0‘;
printf("%s\n",p);
cout<<p<<endl;
 
 
 
char * 转 string
可以直接赋值。
string str;
char *p = "adghrtyh";
str = p;
cout << str << endl;
/*printf("%s", str);--这个是会出问题的,因为“%s”
要求后面的对象的首地址。但是string不是这样的一个类型*/
printf("%s\n", str.c_str());
 
 
char[] 转string
这个也可以直接赋值。但是也会出现上面的问题。需要同样的处理。
string str;
char p[10] = "nihao";
str = p;
cout << str << endl;
/*printf("%s", str);--这个是会出问题的,因为“%s”
要求后面的对象的首地址。但是string不是这样的一个类型*/
printf("%s\n", str.c_str());


本文出自 “9015088” 博客,请务必保留此出处http://9025088.blog.51cto.com/9015088/1715908

c++数据类型间的转换

标签:数据类型转换

原文地址:http://9025088.blog.51cto.com/9015088/1715908

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!