1.传给未分配内存的const char* (LPCTSTR)指针. 2.传给未分配内存的指针. 3.第二种用法。把CString 值赋给已分配内存的char *。 4.第三种用法.把CString 值赋给已分配内存char[]数组. 首先声明我不是一个高手,而是一个初学者,文章同样也是一个初学者对于CString和char*转换的理解。
{ wchar_t *origString = L"Hello,World"; wcout << origString << endl; // Convert to a char* size_t origsize = wcslen(origString) + 1; const size_t newsize = 100; size_t convertedChars = 0; char CharString[newsize]; wcstombs_s(&convertedChars, CharString, origsize, origString , _TRUNCATE); cout << CharString << endl; } 输出正确,均为Hello, World! 结合上面的两段,看看能不能将CString转换为char* CString origCString("Hello, World!"); wchar_t* wCharString = origCString.GetBuffer(origCString.GetLength()+1); size_t origsize = wcslen(wCharString) + 1; size_t convertedChars = 0; char *CharString; CharString=new char(origsize); wcstombs_s(&convertedChars, CharString, origsize, wCharString , _TRUNCATE); cout << CharString << endl; 成功输出字符串"Hello,World" 至于为什么原来的那段代码别人都能用好,而我在VC++2005下面去不能直接使用,还要通过转换呢?正好看到《Programming Windows》的第二章讲Unicode的和在msdn论坛问了一下相关问题后得到答案。 原来在VC++ 2005以前,应用程序默认都是关闭对Unicode的支持的,而在VC2005中,默认打开了对它的支持,CString对应的字符串应该是TCHAR,TCHAR的定义是这样的, #ifdef _UNICODE typedef wchar_t TCHAR ; #else typedef char TCHAR; #endif 我想这个就是为什么我在VC++2005种不能直接转换的原因。在工程中应该可以关闭对于Unicode的支持,从而可以直接转换。这个做法是右击工程名—〉Property—〉General中的character set中选择not set,这样,本文开头的那段代码就可以正确的执行了。 |
int n=1;
CString str;
str.format(“%d”,n);
CString到int的转换
CString str=”1”;
Int n=atoi(str.GetBuffer(0));
char*到CString
char sz[128];
CString str;
str.format(“%s”,sz);
或
char sz[128];
CString str;
str+=sz;
CString到char*
CString str;
int nlength=str.getLength();
charI sz=new char[nlength];
sz=str.GetBuffer(0);
或
CString str;
wchar_t * sz=str.GetString()
float到CString
float f=0.0;
CString str;
str.format(“%f”,f);
CString到float
CString=”0.0”;
float f=atof(str.GetBuffer(0));
选自:http://blog.163.com/dr_luo/blog/static/8777215020091129115230731/
四:char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_string 和 System.String互相转换
http://blog.163.com/dr_luo/blog/static/877721502009112911565772/ 这网页的客主还有许多关于类型转化的文章
五:MFC下Unicode字符串与MBCS字符串的转换 vs2008使用atof
http://blog.csdn.net/zhuce0001/article/details/9140613