现在的位置: 首页 > 综合 > 正文

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

2019年05月31日 ⁄ 综合 ⁄ 共 5064字 ⁄ 字号 评论关闭
    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();  

抱歉!评论已关闭.