数据类型的转换 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());
时间: 2024-10-08 09:07:17