MFC中CString,int,string,char * ,char[] 之间互转

来源:互联网 发布:网络道德调查问卷 编辑:程序博客网 时间:2024/06/12 18:49

<1>
(1)string 转 CString 
CString.format("%s", string.c_str()); 

(2)char 转 CString 
CString.format("%s", char*); 

(3)char 转 string 
string s(char *); 

(4)string 转 char * 
char *p = string.c_str(); 

(5)CString 转 string 
string s(CString.GetBuffer()); 

(6)string -> CString 
CString.format("%s", string.c_str()); 
用c_str()确实比data()要好. 
(7)char -> string 
string s(char *); 
你的只能初始化,在不是初始化的地方最好还是用assign(). 
(8)CString -> string 
string s(CString.GetBuffer()); 
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间. 

  (9)《C++标准函数库》中说的 
有三个函数可以将字符串的内容转换为字符数组和C—string 
1.data(),返回没有”/0“的字符串数组 
2,c_str(),返回有”/0“的字符串数组 
3,copy() 

--------------------------------------------------------------- 

CString与int、char*、char[100]之间的转换- - 


CString与int、char*、char[100]之间的转换- - 



(10)CString互转int 

将字符转换为整数,可以使用atoi、_atoi64或atol。 
而将数字转换为CString变量,可以使用CString的Format函数。如 
CString s; 
int i = 64; 
s.Format("%d", i) 
Format函数的功能很强,值得你研究一下。 
void CStrDlg::OnButton1() 
{  
CString  ss="1212.12"; 
int temp=atoi(ss); 
CString aa; 
aa.Format("%d",temp); 
AfxMessageBox("var is " + aa); 
}  
sart.Format("%s",buf);  
CString互转char* 
CString strtest; 
char * charpoint; 
charpoint="give string a value"; 
strtest=charpoint; 
charpoint=strtest.GetBuffer(strtest.GetLength());  
标准C里没有string,char *==char []==string  
可以用CString.Format("%s",char *)这个方法来将char *转成CString。要把CString转成char *,用操作符(LPCSTR)CString就可以了。 


  (11)CString转换 char[100] 
char a[100]; 
CString str("aaaaaa"); 
strncpy(a,(LPCTSTR)str,sizeof(a));
================================传说中的分割线================================

如何实现CString 与folat   int   char *   CTime  string等的互相转变方法。

      CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓冲区长度。 有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数和缓冲区长度被巧妙隐藏。

1. CString 与 float 的转变

1) CString 转变为float

    CString strContent;

    float fNum;

   fNum=atof(strContent);

2)float 转变为CString

     CString   strContent;   
     float   fNum;   
    strContent.format("%f",fNum);

2. CString 与int 的转变

1)CString转变为int

   CString strContent;

    int nNum;

   nNum=atoi(strContent);

2) int 转变为CSting

    CString   strContent;   
     int nNum;   
    strContent.format("%d",nNum);

3. CString与char *的转变

   1)CString转变为 char *
   方法一,使用强制转换。例如:

        CString strString;
        LPTSTR lpsz =(LPTSTR)(LPCTSTR)strString;

  方法二,使用strcpy。例如:

        CString strString;
        LPTSTR lpsz = new TCHAR[strString.GetLength()+1];
         _tcscpy(lpsz, strString);

  需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。

  方法三,使用CString::GetBuffer。
    CString   strContent;   
    char*   pcContent;   
    
    pcContent=strContent.GetBuffer(strContent.GetLength());   
    strContent.ReleaseBuffer();
    如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。 
    在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。

因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。
    
   2) char *转变为 CString
   将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。
    char *pcArray;
    CString strContent;
    strContent.Format(_T("%s"), pcArray);
       

4. CString CTime

1) CTime转变为CStirng:   
    
  CTime   t;   
  t.GetCurrentTime();   
  CString   s=t.Format("%Y-%B-%d"); 
    
 2)CString转变为 CTime:   
    
  CString   s("2007-9-14   19:06:23");   
  int   nYear,   nMonth,   nDate,   nHour,   nMin,   nSec;   
  sscanf(s,   "%d-%d-%d   %d:%d:%d",   &nYear,   &nMonth,   &nDate,   &nHour,   &nMin,   &nSec);   
  CTime   t(nYear,   nMonth,   nDate,   nHour,   nMin,   nSec);

5. CString string

 1) CString 转变为string
 CString   strContent;   
  string   str1(strContent.GetString()   );   
  str1=strContent.GetString();
  
  2)string转变为CString 
  string   str1;   
  CString  strContent(str1.c_str()   );   
  strContent =   str1.c_str();   
因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。
    
   2) char *转变为 CString
   将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。
    char *pcArray;
    CString strContent;
    strContent.Format(_T("%s"), pcArray);
       

4. CString CTime

1) CTime转变为CStirng:   
    
  CTime   t;   
  t.GetCurrentTime();   
  CString   s=t.Format("%Y-%B-%d"); 
    
 2)CString转变为 CTime:   
    
  CString   s("2007-9-14   19:06:23");   
  int   nYear,   nMonth,   nDate,   nHour,   nMin,   nSec;   
  sscanf(s,   "%d-%d-%d   %d:%d:%d",   &nYear,   &nMonth,   &nDate,   &nHour,   &nMin,   &nSec);   
  CTime   t(nYear,   nMonth,   nDate,   nHour,   nMin,   nSec);

5. CString string

 1) CString 转变为string
 CString   strContent;   
  string   str1(strContent.GetString()   );   
  str1=strContent.GetString();
  
  2)string转变为CString 
  string   str1;   
  CString  strContent(str1.c_str()   );   
  strContent =   str1.c_str();   

以上分别转自:

http://shelleyhacker.javaeye.com/blog/854877

http://blog.csdn.net/tuwen/archive/2007/11/05/1868176.aspx


原创粉丝点击