断断续续学习C++有一段时间了,在学习和编写自己的小工具过程中也遇到了很多问题,今天终于可以写一篇自己的原创文章了,也不算是原创,是对自己前面编程过程中的小问题的汇总吧,现在整理下来供自己以后翻阅还有像我一样的菜鸟们参考。
进入正题,首先要用格式转换会用到一些常用的宏,一般来说,需要在程序中添加这个头文件引用#include<atlconv.h>,用到这个头文件主要是为了使用以下几个宏:
USES_CONVERSION
A2W
W2A
T2CW
T2CA
也就是编码转换的几个宏,它的内部封装了MultiByteToWideChar和WideCharToMultiByte函数。
下面是我做小工具以来遇到的一些数据类型转换:
1. cstring转char
USES_CONVERSION;
char*path = T2A(inPath.GetBuffer(0));
inPath.ReleaseBuffer();
2. CString转到string
USES_CONVERSION;
stringoutpath = W2CA((LPCWSTR)filePath);
(注意:USES_CONVERSION这一句在一个类文件中只出现一次就可以,第二次用到格式转换功能时不需要重复写。并且注意它是在堆栈上分配空间的,也就是说你在你在函数未结束就不会被释放掉。所有要注意不要在一个函数中用while循环执行它,不然栈空间就马上会分配完(栈空间一般只有2M,很小)。)
3. String转Char*
constchar* a = ((*it)->dd).c_str();
(这个问题是我在用VECTOR进行数据输出的时候遇到的,我在VECTOR中定义的string类型的数据无法通过ofstream输出到txt文本中,后来我二姨夫帮我改代码进行了这样一个转换就可以输出了,这个地方后续继续研究一下造成原因。)
4. double转string
doubledx= (*it)->xx;
char b[20];
sprintf(b,"%.8lf",dx);
(这个也是在vector输出时遇到的问题,直接通过ofstream输出数据到文本文件中数据自动存储成了科学计数法的形式,没办法只好在输出之前做一个格式转换。)
5. CString转double
CString x1 = sx.Left(pos);
double xx = (float)atof((char*)(LPTSTR)(LPCTSTR)x1);
哈,目前就找到用过的这么几个,后续陆续补充吧。