Convert.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #pragma once
  2. #pragma once
  3. #include <iostream> //标准IO
  4. #include "atlstr.h" //使用CString类型
  5. #include <string> //使用string类型
  6. #include <sstream> //使用stringstream需要引入这个头文件
  7. using namespace std; //标准库命名空间(cout、string)
  8. /*
  9. * 源博客页:https://www.cnblogs.com/timefiles/p/ConvertInValueCStringString.html
  10. * 博客主页:https://www.cnblogs.com/timefiles
  11. * 创建时间:2021/6/14
  12. */
  13. namespace Convert
  14. {
  15. //函数模板:将常用的数值类型转换为string类型变量(此方法具有普遍适用性)
  16. template<typename T>
  17. string ToString(const T& t)
  18. {
  19. ostringstream oss; //创建一个格式化输出流
  20. oss << t; //把值传递入流中
  21. return oss.str();
  22. }
  23. string ToString(const int& val) { return to_string(val); }
  24. string ToString(const long& val) { return to_string(val); }
  25. string ToString(const long long& val) { return to_string(val); }
  26. string ToString(const unsigned int& val) { return to_string(val); }
  27. string ToString(const unsigned long& val) { return to_string(val); }
  28. string ToString(const unsigned long long& val) { return to_string(val); }
  29. string ToString(const float& val) { return to_string(val); }
  30. string ToString(const double& val) { return to_string(val); }
  31. string ToString(const long double& val) { return to_string(val); }
  32. //函数模板:将string类型变量转换为常用的数值类型(此方法具有普遍适用性)
  33. template <class T>
  34. T ToValue(const string& str) {
  35. istringstream iss(str);
  36. T num;
  37. iss >> num;
  38. return num;
  39. }
  40. double ToDouble(const string& str) { return stod(str); }
  41. float ToFloat(const string& str) { return stof(str); }
  42. int ToInt(const string& str) { return stoi(str); }
  43. long ToLong(const string& str) { return stol(str); }
  44. long double ToLongDouble(const string& str) { return stold(str); }
  45. long long ToLongLong(const string& str) { return stoll(str); }
  46. unsigned long ToULong(const string& str) { return stoul(str); }
  47. unsigned long long ToULongLong(const string& str) { return stoull(str); }
  48. namespace MFC
  49. {
  50. //将CString类型变量转换为string类型
  51. string CStringToString(CString cs) {
  52. #ifdef _UNICODE
  53. //如果是unicode工程
  54. USES_CONVERSION;
  55. std::string str(W2A(cs));
  56. return str;
  57. #else
  58. //如果是多字节工程
  59. std::string str(cs.GetBuffer());
  60. cs.ReleaseBuffer();
  61. return str;
  62. #endif // _UNICODE
  63. }
  64. //将string类型变量转换为CString类型
  65. CString StringToCString(string str) {
  66. #ifdef _UNICODE
  67. //如果是unicode工程
  68. USES_CONVERSION;
  69. CString ans(str.c_str());
  70. return ans;
  71. #else
  72. //如果是多字节工程
  73. CString ans;
  74. ans.Format("%s", str.c_str());
  75. return ans;
  76. #endif // _UNICODE
  77. }
  78. //模板函数:将CString类型变量转换为常用的数值类型(此方法具有普遍适用性)
  79. template <class T>
  80. T ToValue(const CString& cStr)
  81. {
  82. string str = CStringToString(cStr);
  83. return Convert::ToValue<T>(str);
  84. }
  85. //模板函数:将常用的数值类型转换为CString类型变量(此方法具有普遍适用性)
  86. template<typename T>
  87. static CString ToCString(const T& t)
  88. {
  89. string str = Convert::ToString<T>(t);
  90. return StringToCString(str);
  91. }
  92. CString ToString(const int& val) { CString str; str.Format(_T("%d"), val); return str; }
  93. CString ToString(const long& val) { CString str; str.Format(_T("%ld"), val); return str; }
  94. CString ToString(const unsigned int& val) { CString str; str.Format(_T("%ud"), val); return str; }
  95. CString ToString(const unsigned long& val) { CString str; str.Format(_T("%uld"), val); return str; }
  96. CString ToString(const float& val) { CString str; str.Format(_T("%.2f"), val); return str; }
  97. CString ToString(const double& val) { CString str; str.Format(_T("%.2f"), val); return str; }
  98. double ToDouble(const CString& str) { return _ttof(str); }
  99. float ToFloat(const CString& str) { return _ttof(str); }
  100. int ToInt(const CString& str) { return _ttoi(str); }
  101. long ToLong(const CString& str) { return _ttol(str); }
  102. long long ToLongLong(const CString& str) { return _ttoll(str); }
  103. #ifdef _UNICODE
  104. //如果是unicode工程
  105. long double ToLongDouble(const CString& str) { wchar_t* pEnd; return _tcstold(str, &pEnd); }
  106. unsigned long ToULong(const CString& str) { wchar_t* pEnd; return _tcstoul(str, &pEnd, 10); }
  107. unsigned long long ToULongLong(const CString& str) { wchar_t* pEnd; return _tcstoull(str, &pEnd, 10); }
  108. #else
  109. //如果是多字节工程
  110. long double ToLongDouble(const CString& str) { char* pEnd; return _tcstold(str, &pEnd); }
  111. unsigned long ToULong(const CString& str) { char* pEnd; return _tcstoul(str, &pEnd, 10); }
  112. unsigned long long ToULongLong(const CString& str) { char* pEnd; return _tcstoull(str, &pEnd, 10); }
  113. #endif // _UNICODE
  114. }
  115. }