总结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
- 总结c/c++中各种基本数据类型转换方法
- 0c中各种数据类型的转换方法
- C各种数据类型总结
- C基本数据类型转换
- c c++语言各种数据类型的转换总结
- C中数据类型转换
- C中数据类型转换
- Object-c中各种数据类型之间的转换
- C语言基本数据类型转换
- C语言中各种数据类型长度的总结(转)
- C语言中各种数据类型长度的总结
- C/C++语言中各种数据类型长度的总结
- C语言中各种数据类型长度的总结
- C/C++语言中各种数据类型长度的总结
- objective-c基本数据类型总结
- c/c++ 数据类型转换总结
- c/c++ 数据类型转换总结
- C语言各种数据类型自动转换
- 最近关于编程的一些反思
- Android异步更新UI的方式之使用Handler消息传递机制
- OC学习之Runtime之关联对象
- Android 在Service中监听软键盘显示状态
- 从苹果文档学习CoreAnimation(一)
- 总结c/c++中各种基本数据类型转换方法
- 产品经理如何做好行业研究及竞争对手分析工作
- 日经春秋 20150915
- Android Studio 运行时出现 finished with non-zero exit value 2
- 数字证书原理
- html iframe高度自适应
- maven项目部署到Repository(Nexus)
- 虚拟机在64位CentOS搭建lamp环境出现的一些报错以及解决方法
- 第n个丑数