MFC中如何吧CString类型转换为double或int型??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC中如何吧CString类型转换为double或int型??相关的知识,希望对你有一定的参考价值。

修改方式为: 在解决方案窗口右键工程名-->属性->General项(我用的是英文的)-->字符集, 选择多字节那个就行了。

1、转成int:int a = atoi(str.GetBuffer());

2、转成double:double b = atof(str.GetBuffer())。

CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。

mfc是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数,并且包含一个应用程序框架,以减少应用程序开发人员工作量。vc++是微软公司开发的c/c++的集成开发环境,所谓集成开发环境,就是说利用它你可以编辑,编译,调试,而不是使用多种工具轮换操作,灵活性较大。有时人们说vc呢也指它的内部编译器,集成开发环境必须有一个编译器内核,要不有什么用,例如DevC++其中一个编译器内核就是gcc。

MFC除了是一个类库以外,还是一个框架,你应该试过,在vc++里新建一个MFC的工程,开发环境会自动帮你产生许多文件,同时它使用了mfcxx.dll。xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专心的考虑你程序的逻辑,而不是这些每次编程都要重复的东西,但是由于是通用框架,没有最好的针对性,当然也就丧失了一些灵活性和效率但是MFC的封装很浅,所以效率上损失不大,灵活性还可以,虽然也有很多缺陷,但还是一个比较好的东西。

参考技术A 首先你要确定你的工程字符集用的是多字节而不是unicode才能用下面的方法, 因为vs2008/2010默认使用的是unicode编码. 修改方式为: 在解决方案窗口右键工程名-->属性->General项(我用的是英文的)-->字符集, 选择多字节那个就行了
CString str;
转成int: ;int a = atoi(str.GetBuffer());
转成double: double b = atof(str.GetBuffer());

// 如果你坚持要用unicode的话, 你就用下面两个函数:
转成int: ;int a = _wtoi(str.GetBuffer());
转成double: double b = _wtof(str.GetBuffer());本回答被提问者采纳
参考技术B 先(LPCTSTR)你的CString,然后atof或者atoi它,前提是你的CString必须是有效的double或者int。 参考技术C char *s; double x; int i; long l;
s = " -2309.12E-15"; /* Test of atof */
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );
这是msdn上关于ASCII的一个例子,相信可以帮助到你了吧

如何将 ATL/MFC CString 转换为 QString?

【中文标题】如何将 ATL/MFC CString 转换为 QString?【英文标题】:How do I convert an ATL/MFC CString to a QString? 【发布时间】:2011-09-07 03:12:36 【问题描述】:

鉴于项目的编码可能是 Unicode(但不确定),将 ATL::CString 转换为 QString 的最佳方法是什么?

我想到的是这样的:

CString c(_T("SOME_TEXT"));
//...
std::basic_string<TCHAR> intermediate((LPCTSTR)c);
QString q;

#ifdef _UNICODE 
q = QString::fromStdWString(intermediate);
#else
q = QString::fromStdString(intermediate);
#endif

你认为它有效吗?还有其他想法吗?

【问题讨论】:

实际上没有,因为由于某种原因我无法链接。在尝试链接之前,我想问一下我是否走对了 【参考方案1】:

您不需要到std::string 的中间转换。 CString 类可以被视为一个简单的 C 风格字符串;也就是一个字符数组。您所要做的就是将其转换为LPCTSTR

一旦你有了它,你只需要根据CString 中的字符是char 还是wchar_t 类型来创建QString 对象。对于前者,您可以使用standard constructors for QString 之一,对于后者,您可以使用fromWCharArray function。

类似于以下代码(未经测试,我不再安装 Qt):

CString c(_T("SOME_TEXT"));
QString q;

#ifdef _UNICODE 
q = QString::fromWCharArray((LPCTSTR)c, c.GetLength());
#else
q = QString((LPCTSTR)c);
#endif

编辑: 如 cmets 中所建议,您必须在项目的属性中禁用“将 wchar_t 视为内置类型”,才能使上述代码在 Visual Studio 中正确链接( source)。

对于_UNICODE,相信你也可以使用fromUtf16 function:

CString c(_T("SOME TEXT"));
QString q = QString::fromUtf16(c.GetBuffer(), c.GetLength());

【讨论】:

谢谢 :) 关于为什么 QString::fromWCharArray 没有链接的任何想法?奇怪的是,它是链接器唯一找不到的函数... @Ali:也许您使用的是不包含该功能的旧版 Qt?当您留下该评论时,我添加了另一个可能的解决方案。你可以试试。 不不,我找到了原因。它是here @Ali:令人着迷,我从来没有想到过。仍然不确定我是否理解为什么它是必要的。我猜 VS 编译器对待 wchar_t 的方式与 Qt 的预期不同。 是的,我想是的。我猜 wchar_t 是一些 typedef,当它是内置的时,链接器会查找采用内置类型参数而不是 typedef 类型参数的函数。我相信这就是它没有链接的原因。

以上是关于MFC中如何吧CString类型转换为double或int型??的主要内容,如果未能解决你的问题,请参考以下文章

C++ MFC CString怎么转换成Double

C++ MFC double 到 CString

MFC,CString与intdouble 转换

C++ string 转化为LPCTSTR

CString .Format

mfc中,如何将CString 转换成 string