MFC/C++/C中字符类型CString, int, string, char*之间的转换

来源:互联网 发布:靓邦素化妆品淘宝 编辑:程序博客网 时间:2024/05/19 20:00
    1 CString,int,string,char*之间的转换     string 转 CString     CString.format("%s", string.c_str());          char 转 CString     CString.format("%s", char*);          char 转 string     string s(char *);          string 转 char *     char *p = string.c_str();           //  CString转std::string     CString str = dlg.GetPathName();     setlocale(LC_ALL, "chs");     char *p = new char[256];     wcstombs( p, str, 256 );     m_fileName = p;         1,string -> CString     CString.format("%s", string.c_str());     用c_str()确实比data()要好.     2,char -> string     string s(char *);     你的只能初始化,在不是初始化的地方最好还是用assign().     3,CString -> string     string s(CString.GetBuffer());     GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.               《C++标准函数库》中说的     有三个函数可以将字符串的内容转换为字符数组和C—string     1.data(),返回没有”\0“的字符串数组     2,c_str(),返回有”\0“的字符串数组     3,copy()               CString互转int          将字符转换为整数,可以使用atoi、_atoi64或atol。     而将数字转换为CString变量,可以使用CString的Format函数。如     CString s;     int i = 64;     s.Format("%d", i)     Format函数的功能很强,值得你研究一下。          void CStrDlg::OnButton1()     {     // TODO: Add your control notification handler code here     CString     ss="1212.12";     int temp=atoi(ss);     CString aa;     aa.Format("%d",temp);     AfxMessageBox("var is " + aa);     }          sart.Format("%s",buf);          CString互转char*          ///char * TO cstring     CString strtest;     char * charpoint;     charpoint="give string a value";     strtest=charpoint;               ///cstring TO char *     charpoint=strtest.GetBuffer(strtest.GetLength());          标准C里没有string,char *==char []==string          可以用CString.Format("%s",char *)这个方法来将char *转成CString。要把CString转成char *,用操作符(LPCSTR)CString就可以了。               CString转换 char[100]          char a[100];     CString str("aaaaaa");     strncpy(a,(LPCTSTR)str,sizeof(a));     2 CString类型的转换成int     CString类型的转换成int     将字符转换为整数,可以使用atoi、_atoi64或atol。          //CString aaa = "16" ;    //int int_chage = atoi((lpcstr)aaa) ;               而将数字转换为CString变量,可以使用CString的Format函数。如     CString s;     int i = 64;     s.Format("%d", i)     Format函数的功能很强,值得你研究一下。     如果是使用char数组,也可以使用sprintf函数。         //CString ss="1212.12";     //int temp=atoi(ss);     //CString aa;     //aa.Format("%d",temp);               数字->字符串除了用CString::Format,还有FormatV、sprintf和不需要借助于Afx的itoa          3 char* 在装int     #include <stdlib.h>         int atoi(const char *nptr);    long atol(const char *nptr);    long long atoll(const char *nptr);    long long atoq(const char *nptr);          4 CString,int,string,char*之间的转换     string aa("aaa");    char *c=aa.c_str();              cannot convert from 'const char *' to 'char *'    const char *c=aa.c_str();          5 CString,int,string,char*之间的转换     string.c_str()只能转换成const char *,    要转成char *这样写:         string mngName;    char t[200]; memset(t,0,200); strcpy(t,mngName.c_str());你是在拿CString的值向string或者char*CString向这些类型转化的时候,要使用CT2A()这个宏比如CString cs;string s;s = cs;//这样是错误的s = CT2A(cs);//要这样用


如何实现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();  

原创粉丝点击