常用数据类型转换CString do…

来源:互联网 发布:淘宝店铺装修插件 编辑:程序博客网 时间:2024/06/05 06:20
原文地址:double char int WCHAR(转)">常用数据类型转换CString double char int WCHAR(转)作者:xiaoyo02

WCHAR ->CString

 

view plaincopyto clipboardprint?
  1. WCHAR ch1[10]=”abc”;  
  2. CString ch2;  
  3. Ch2=ch1;  

CString->WCHAR

 

view plaincopyto clipboardprint?
  1. CString src =”abc”  
  2. WCHAR des [10];  
  3. lstrcpy(des,src);  
 

WCHAR ->double

 

view plaincopyto clipboardprint?
  1. Double des;  
  2. WCHAR src[10];  
  3. swscanf(src,_T("%lf"),&des);  
 

double->CString

 

view plaincopyto clipboardprint?
  1. CString des  
  2. double src  
  3. des.Format(_T("%lf"), src);  
 

WCHAR ->int

 

view plaincopyto clipboardprint?
  1. Double des;  
  2. WCHAR src[10];  
  3. swscanf(src,_T("%d"),&des);  
 

int ->CString

 

view plaincopyto clipboardprint?
  1. CString des  
  2. double src  
  3. des.Format(_T("%d"), src);  
 

char -> WCAHR

 

view plaincopyto clipboardprint?
  1. WCHAR WBuffer[BufferLength];  
  2. memset(WBuffer, 0,BufferLength);   
  3. char src =”abc”;  
  4. int nLen strlen(src) +1;  
  5. int nwLen  MultiByteToWideChar(CP_ACP, 0, src,nLen,   NULL, 0);    
  6. MultiByteToWideChar(CP_ACP, 0, src, nLen, WBuffer, nwLen);   //change char to PWCHAR  

////-————————————————————

_T宏的作用就是转换成TCHAR

 

当支持UNICODE的时候,CString内的类型是wchar_t,当转换时必须考虑是wchar_t而不是char,所以相应的也要改变。

从CString转换为int

Cpp代码
CString str;int num;num=_wtoi(str.GetBuffer());   //int _wtoi (const wchar_t *_Str);
//说明CString -> wchar_t *_ 用str.GetBuffer();

 

从int转为CString,因为是wchar_t所以直接用CString::Format()时会出现无法从wchar_t转换到char的错误。

Cpp代码
CString str;
int num;  

str.Format(_T("%d"),num);  

 
 

1 string toCString   

  CString.format("%s",string.c_str());

2 CString to string

string str(CString.GetBuffer());

CString.ReleaseBuffer()

3 string to char *

char *p=string.c_str();

4 char * to string

string str(char*);

5 CString to char *

strcpy(char,CString,sizeof(char));

6 char * to CString

CString.format("%s",char*);

 

CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char*转换时,要把char定义成为const char*,这样是最安全的。

 

有一篇文件CString 操作指南,比较深刻

http://www.vckbase.com/document/viewdoc/?id=1094

GetBuffer,它的作用是返回一个可写的缓冲指针

关于ReleaseBuffer

当你调用 ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存入 CString 对象中。

必须强调一点,在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。

例子:

CString s(...);
LPTSTR p = s.GetBuffer();
//... 这个指针 p 发生了很多事情
int n = s.GetLength(); // 很糟D!!!!! 有可能给出错误的答案!!!
s.TrimRight(); // 很糟!!!!! 不能保证能正常工作!!!!
s.ReleaseBuffer(); // 现在应该 OK
int m = s.GetLength(); // 这个结果可以保证是正确的。
s.TrimRight(); // 将正常工作。

 

MFC中ReleaseBuffer的代码:

    void ReleaseBuffer( int nNewLength = -1 )
    {
         if( nNewLength == -1 )
         {
             nNewLength = StringLength( m_pszData );
        }
         SetLength( nNewLength );
    }
很明显ReleaseBuffer只有一个作用,就是更新字符串的长度。