C++的一些基本数据类型转换
2010-07-04 19:58
916 查看
最近公司的新人总是问我关于C++类型转换的问题,回想起来,才开始学习C++对类型转换感到非常麻烦,我特此在这坐一个基本的整理,希望能给予帮助,错误,不完整之处,请不吝赐教。
1.string 2 int
(1) atoi
(2) strtol, strtoul
2. int 2 string
(1) stringstream
(2) sprintf
3 程序中还遇到不同类型的相互转换,下面是转换的模板。
4 在MFC中,CString 的转换
(1)与 string 的转换
(2)Format.把int ,double 转换成CString
(3)把CString 转换成 int, double
(4)与char* 转换
(5) stringstream 转换模版
5.boost 转换
以上代码在VS2005下编译通过,并运行正确!
1.string 2 int
(1) atoi
string str = "2010"; int i = atoi(str.c_str()); // i = 2010
(2) strtol, strtoul
string str = "2010"; int i = strtol(str.c_str(), NULL, 10);// strtoul 效果一样, i = 2010
2. int 2 string
(1) stringstream
int i = 2010; stringstream stream; // #include <sstream> string str; stream << i; stream >> str; // str = 2010 // 也可以这样写str = stream.str();
(2) sprintf
int i = 2010; string str; char c[5]; // 要设置大小 sprintf(c, "%d ", i); str += c; // str = 2010
3 程序中还遇到不同类型的相互转换,下面是转换的模板。
#include <iostream> #include <string> #include <sstream> #include <stdlib.h> using namespace std; template<class T> void ConvertFromString(T &value, const string &s) { stringstream ss(s); ss >> value; } template<typename T> string Convert2String(const T &value) { stringstream ss; ss << value; return ss.str(); } int main() { string s = "2010.07"; int i = 0; ConvertFromString(i, s); // i = 2010 double d = 0.0; ConvertFromString(d, s); // d = 2010.07 只能到小数点后2位 cout << d << endl; double n = 2010.07; string str; str = Convert2String(n); // str = 2010.07 只能到小数点后2位 return 0; }
4 在MFC中,CString 的转换
(1)与 string 的转换
CString strMFC = _T("MFC"); std::string strSTL = "STL"; // CString->std::string strSTL = strMFC.GetBuffer(0); // unicode情形下: CStringW strW = _T("MFC_W"); CStringA strA(strW.GetBuffer(0)); strW.ReleaseBuffer(); strSTL = strA.GetBuffer(0); strA.ReleaseBuffer(); //std::string->CString 例子: CString strMFC; std::string strSTL = "STL"; strMFC = strSTL.c_str();
(2)Format.把int ,double 转换成CString
int i = 2010; double d = 2010.2011; BYTE bt = 0x0A; CString str; str.Format(_T("%d"), i); // str = 2010 str.Format(_T("%f"), d); // str = 2010.2010 str.Format(_T("%02X"), bt); // str = 0A
(3)把CString 转换成 int, double
// 在Unicode下: CString str = _T("2010.07"); int i = _tstoi(str); // i = 2010 double b = _tstof(str); // b = 2010.07 // 非Unicode下: CString str = _T("2010"); int i = strtol(str, NULL ,10); // i = 2010
(4)与char* 转换
///char* 2 cstring CString str; char* c = "2010.07"; str.Format("%s", c); //str = c; ///cstring 2 char * c = str.GetBuffer(str.GetLength());
(5) stringstream 转换模版
#include <string> #include <sstream> using namespace std; template<typename T> // typename:我感觉这样写要容易理解点,但是可能带来移植后不能编译 void ConverFormCString(T &value , const CString &s) { // Unicode CStringW strW(s); CStringA strA(strW.GetBuffer(0)); strW.ReleaseBuffer(); string str = strA.GetBuffer(0); strA.ReleaseBuffer(); // 非 Unicode, 可以简单使用 // string str = s.GetBuffer(0); stringstream ss(str); ss >> value; } template<typename T> CString Convert2CString(const T &value) { stringstream ss; ss << value; CString str; str = ss.str().c_str(); // 先stringstream->string,然后string->CString return str; } int main() { // 可用于大数的转换 // UINT64:无法支持负数 // 0 ~ 18,446,744,073,709,551,615都可转换 UINT64 i = 1234567890123; CString str = Convert2CString(i); // str1 = 1234567890123 UINT64 j = 0; ConverFormCString(j, str); cout << j << endl; // j = 1234567890123 return 0; }
5.boost 转换
#include <boost/lexical_cast.hpp> using namespace boost; int i = lexical_cast<int>("2010"); double d = lexical_cast<double>( "2010.07");
以上代码在VS2005下编译通过,并运行正确!
相关文章推荐
- C++中类类型和基本数据类型的转换
- C/C++ 基本数据类型之间的相互转换 int / char / string / vector windows与linux通用
- 一些基本的C/C++数据类型
- C++中sprintf实现将一个基本数据类型的数组转换成字符串
- 总结c/c++中各种基本数据类型转换方法
- 关于C++和C#的自定义数据类型转换的一些思考
- 0710C++基本数据类型之间的转换
- C++基本数据类型及类型转换
- C++程序员学Java系列之五:常量,变量,基本数据类型及转换
- C++中各种基本数据类型转换为string类型
- C++基本数据类型直接的转换
- C++之基本数据类型转换和转换函数
- 8种基本数据类型和运算(隐式转换和强制转换)
- C++中的基本数据类型及派生类型
- C/C++基本数据类型
- Qt中QString类型与标准c++数据类型的转换
- String和八种基本数据类型互相转换
- C++数据类型转换以及转换构造函数
- C++数据类型转换以及转换构造函数
- Java基本数据类型和String相互转换