总结c/c++中各种基本数据类型转换方法

来源:互联网 发布:linux oracle 软件包 编辑:程序博客网 时间:2024/05/17 08:03

编程实例:

#include <iostream>#include <stdio.h>#include <sstream>#include <stdlib.h>#include <ctype.h>using namespace std;//convert by templatetemplate<class T>void to_string(string & result,const T& t){ostringstream oss;//创建一个流oss<<t;//把值传递如流中result=oss.str();//获取转换后的字符转并将其写入result}template<class out_type,class in_value>out_type convert(const in_value & t){stringstream stream;stream<<t;//向流中传值out_type result;//这里存储转换结果stream>>result;//向result中写入值return result;}int main(int argc, char *argv[]){//string convert to char*    string str = "hello world";const char *p = str.c_str();printf("%s\n", p);//char* convert to stringchar *p2 = "hello world";string str2 = p2;//string str2(p2);cout << str2 << endl;//atoi,atof, atol,strtod,strtol,strtoulchar *p3 = "123";int n1 = atoi(p3);printf("%d\n", n1);// char p4[4];// itoa(n1, p4, 4);// printf("%s\n", p4);char *p4 = "123.4567";printf("%.4f\n", strtod(p4, NULL));printf("%.4f\n", atof(p4));//convert by sprintf functionchar str3[10];int aa = 123321;sprintf(str3, "%d", aa);printf("%s\n", str3);double aa2 = 1231.121;memset(str3, 0, 10);sprintf(str3, "%.3lf", aa2);printf("%s\n", str3);//convert by sscanf functionchar str4[] = "43232";int b;sscanf(str4, "%d", &b);printf("%d\n", b);//convert by stringstreamostringstream os;int i = 123456;os << "hello " <<i;string s = os.str();cout << s << endl;istringstream is;string s1 = "234";is.str(s1);int n2;is >> n2;printf("%d\n", n2);s.clear();to_string(s, "10.324");cout << s << endl;s.clear();to_string(s, true);cout << s << endl;//s = "12.543";double d = convert<double>(s);printf("%.3f\n", d);string cs = convert<string>(d);cout << cs << endl;    return 0;}

推荐使用sprinf 和 sscanf函数转换

当然现在还有一个更好的选择,那就是使用boost库中的lexical_cast,它是类型安全的转换。如下例:

 #include <iostream>#include <sstream>#include <string>#include <cstdlib>#include <boost/lexical_cast.hpp>using namespace std;using namespace boost;int main(void)try{   //以下是内置类型向string转换的解决方案   //lexical_cast优势明显       int ival;       char cval;       ostringstream out_string;       string str0;       string str1;             ival = 100;       cval = 'w';       out_string << ival << " " << cval;       str0 = out_string.str();       str1 = lexical_cast<string>(ival)                    + lexical_cast<string>(cval);       cout << str0 << endl;       cout << str1 << endl;     //以下是string向内置类型转换的解决方案    //几乎和stringstrem相比,lexical_cast就是类型安全的,       int itmpe;       char ctmpe;       str0 = "100k";       str1 = "100h";    istringstream in_string( str0 );       in_string >> itmpe >> ctmpe;       cout << itmpe << " " << ctmpe << endl;      itmpe = lexical_cast<int>(str1);      ctmpe = lexical_cast<char>(str1);       system( "PAUSE" );       return 0;}catch(bad_lexical_cast e){    cout << e.what() << endl;    cin.get();}     

  


0 0
原创粉丝点击