C++ MFC CString怎么转换成Double

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ MFC CString怎么转换成Double相关的知识,希望对你有一定的参考价值。

C++ MFC CString怎么转换成Double 20标签: c++, mfc, cstring 要用C++ MFC做个计算器CString转换成Double那里除了问题通过 double d=atof((LPCSTR)a)总有问题怎么解决?

1、打开编写C语言的软件codeblocks。

2、创建一个编写C语言的文件。

3、接下来开始编写程序,首先是准备转换中需要用到的变量和常量。

4、接着是使用clrscr函数限定开始转换,并且给value赋值为自己想要转换的double型数据。

5、再然后就是使用ecvt函数开始进行转换,并且将转换的结果付给字符数组string。

6、接着就是使用printf函数输出用于接收value值的字符串string。

7、最后可以在控制台上看到输出的结果,正式value的值,不过这个值编程字符串格式了。

参考技术A 在MFC程序中,可以使用Format方法方便的实现int、float和double等数字类型转换为CString字符串。以下是CString的Format支持的格式说明:
%c 单个字符
%d 十进制整数(int)
%ld 十进制整数(long)
%f 十进制浮点数(float)
%lf 十进制浮点数(double)
%o 八进制数
%s 字符串
%u 无符号十进制数
%x 十六进制数
1、int转换为CString

CString str;
int number=15;
//str="15"
str.Format(_T("%d"),number);
//str=" 15"(前面有两个空格;4表示将占用4位,如果数字超过4位将输出所有数字,不会截断)
str.Format(_T("%4d"),number);
//str="0015"(.4表示将占用4位,如果数字超过4位将输出所有数字,不会截断)
str.Format(_T("%.4d"),number);
long转换为CString的方法与上面相似,只需要把%d改为%ld就可以了。
2、double转换为CString
CString str;
double num=1.46;
//str="1.46"
str.Format(_T("%lf"),num);
//str="1.5"(.1表示小数点后留1位,小数点后超过1位则四舍五入)
str.Format(_T("%.1lf"),num);
//str="1.4600"
str.Format(_T("%.4f"),num);
//str=" 1.4600"(前面有1个空格)
str.Format(_T("%7.4f"),num);
float转换为CString的方法也同上面相似,将lf%改为f%就可以了。
3、将十进制数转换为八进制
CString str;
int num=255;
//str="377"
str.Format(_T("%o"),num);
//str="00000377"
str.Format(_T("%.8o"),num);

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

2、例程:
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());
参考技术C 1:可以为控件关联一个double类型变量,然后updatedata(false
)2;或者楼上函数double d=_wtof(a.GetBuffer(0))本回答被提问者采纳
参考技术D 例如CString Temp = _T("1.234");
如何转换成浮点1.234

#include<stdio.h>
int main()

float p;
int a=1,n;

while(n<=70)

a=a*(365-n+1);
n++;

p=a/365;
for(int i=1;i<=70;i++)

printf("p=%f\n",p);

return 0;

CString到字节和字节到CByteArray转换-MFC

【中文标题】CString到字节和字节到CByteArray转换-MFC【英文标题】:CString To Byte and Byte To CByteArray Conversion-MFC 【发布时间】:2018-05-23 07:08:34 【问题描述】:

我尝试在 MFC 中将 CString 转换为 BYTE*` 和“BYTE* 到 CByteArray”,根据您的建议,CString 已转换为 BYTE*。但我无法将整个 Byte* 转换为 CByteArray 它返回带有一些垃圾值的部分数据。 我在这里描述了我的实际问题......

代码:

CString csData =_T("someData");

BYTE *pByteArray = (PBYTE)(LPCTSTR)csData.GetBuffer();

CString str;
str=LPTSTR(pByteArray);
AfxMessageBox(str); //returns "someData" 

CByteArray arrByte2;

arrByte2.SetSize(csData.GetLength()+1);

memcpy(arrByte2.GetData(), pByteArray, csData.GetLength()+1);

CString text((LPTSTR)arrByte2.GetData(),arrByte2.GetSize());
CStringA result(text);
AfxMessageBox(text);//returns "some﵄﷽꯽ꮫꮫ"

【问题讨论】:

LPCSTR, LPCTSTR and LPTSTR的可能重复 你问错问题了。显然,将受控字符序列转换为BYTE* 没有问题。您真正的问题是,您后来未能适当地解释该数据。此外,GetBuffer() 是错误的调用(其中之一,它要求您稍后调用ReleaseBuffer())。你的意思是打电话给GetString。 实际上想要达到什么目的?这看起来有点像XY problem。 【参考方案1】:

问题出在这里:

str = (LPCSTR(pByteArray));

您将pByteArray 转换为LPCSTR,这实际上是const char *。但是当您的程序编译为 UNICODE 程序时,CString 是一串宽字符 (wChar_t),pByteArray 指向一个数组 wChar_t(宽字符,或 16 位字符)。用调试器查看pByteArray指向的内存。

所以pByteArray指向的内存是这样的:

's', 0, 'o', 0, 'm', 0,  etc.
|-----|
^ this is one wide char     

不像你期望的那样:

's', 'o', 'm',   etc.

为了更正,您需要转换为 LPTSTR(就像您在代码 sn-p 的第一部分中所做的那样)而不是 LPCSTR

str = LPTSTR(pByteArray);

顺便说一句,表达式周围的额外() 是不必要的。

【讨论】:

很好的答案,可能值得注意的是第一个零终止了 char*。 感谢@Jabberwocky "str = LPTSTR(pByteArray);",现在字符串已转换。 我已经编辑了我的问题以描述确切的问题。等待您的回复

以上是关于C++ MFC CString怎么转换成Double的主要内容,如果未能解决你的问题,请参考以下文章

C++ string 转化为LPCTSTR

C++怎么将 CString 转换成 unsigned char 的数组

C++ MFC double 到 CString

MFC 中char转CString问题

在c++的控制台程序中想用mfc的类如Cstring怎么办啊

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