【问题标题】:How to convert CString to integer and float? [duplicate]如何将 CString 转换为整数和浮点数? [复制]
【发布时间】:2016-03-17 07:07:24
【问题描述】:

我正在尝试将 CString 转换为 int 和 float 但无法找到任何 C++ 库函数来完成此操作。请帮忙。

【问题讨论】:

  • 查看atoi和atof函数
  • 我尝试了这些功能但没有用
  • @Anas90 没用?你有没有想过也许你的代码应该受到指责?这些功能有效,即使它们是错误的解决方案。试着调整你的心态,让你期望标准库是准确的,而你的代码是任何缺陷的根源。
  • @DavidHeffernan:为什么你认为 atoi 和 atof 是错误的解决方案..?应该用什么代替..?

标签: c++ windows winapi mfc


【解决方案1】:

MFC 中正确的符合 UNICODE 标准的方法如下:

CString sInt = _T("10");
int n = _ttoi(sInt);

CString sFloat = _T("10.1");
float f = _ttof(sFloat);

正如 David Heffernan 提到的:如果您的项目配置仅为 UNICODE,并且您不使用 MBCS 并且没有任何计划针对旧的 MS 操作系统(如 Window 98),您可以使用:

CStringW s = L"10";
int i = _wtoi(s); 

C++11 中,您可以使用以下内容:

std::string sInt = "10";
int i = std::stoi(sInt);

std::string sFloat = "10.1";
double d = std::stod(sFloat);

【讨论】:

  • 不,不是。正确的 Unicode 方式是不使用 TCHAR。而且使用这些因设计错误处理而被破坏的 C 标准库函数绝不是正确的做法。
  • 我同意 C 标准库函数中的错误处理现在看起来很古老。但我仍然觉得这种方法最简单,最适合这项任务。
  • 这里的投票非常令人失望。在 2015 年鼓励 TCHAR 是很奇怪的。更不用说您忽略检查错误的事实。您如何添加必要的错误检查代码并展示它的外观。以防提问者希望能够区分atoi("2147483647")atoi("2147483648")
  • @DavidHeffernan:问题是关于转换CString。使用 CRT 的 TCHARs、_T 宏和 _t-variants 是处理此问题的正确方法。如果代码使用了CStringW,那就另当别论了。不过,您是对的,_ttoi 和朋友们展示了损坏的错误报告,最好被抛在后面。
  • @IInspectable 不,TCHAR 不是正确的方法。提问者可能正在使用 TCHAR,但不应该这样做,除非需要对 Windows 98 的支持。我对此表示怀疑。在提问者可以把那古老的过去抛在脑后,那么CStringW就是我们所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 2019-02-09
  • 2023-03-10
  • 2021-07-20
  • 1970-01-01
相关资源
最近更新 更多