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的封装很浅,所以效率上损失不大,灵活性还可以,虽然也有很多缺陷,但还是一个比较好的东西。
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型??的主要内容,如果未能解决你的问题,请参考以下文章