• VC++中的CString、char、int类型转换


    1、如何将CString类型的变量赋给char*类型的变量
     
    方法一:GetBuffer函数 
    使用CString::GetBuffer函数。 
    char *p; 
    CString str="hello"; 
    p=str.GetBuffer(str.GetLength()); 
    str.ReleaseBuffer();
     
    将CString转换成char * 时 
    CString str("aaaaaaa"); 
    strcpy(str.GetBuffer(10),"aa"); 
    str.ReleaseBuffer(); 
    当我们需要字符数组时调用GetBuffer(int n),其中n为我们需要的字符数组的长度.使用完成后一定要马上调用ReleaseBuffer(); 
    还有很重要的一点就是,在能使用const char *的地方,就不要使用char *
     
    方法二:memcpy 
    CString mCS=_T("cxl"); 
    char mch[20]; 
    memcpy(mch,mCS,20);
     
    2、CString类向const char *转换 
    char a[100]; 
    CString str("aaaaaa"); 
    strncpy(a,(LPCTSTR)str,sizeof(a)); 
    或者如下: 
    strncpy(a,str,sizeof(a)); 
    以上两种用法都是正确地. 因为strncpy的第二个参数类型为const char *.所以编译器会自动将CString类转换成const char *.
     
    3、CString转LPCTSTR (const char *) 
    CString cStr; 
    const char *lpctStr=(LPCTSTR)cStr;
     
    LPCTSTR转CString 
    LPCTSTR lpctStr; 
    CString cStr=lpctStr;
     
    4、将char*类型的变量赋给CString型的变量 
    可以直接赋值,如: 
    CString myString = "This is a test"; 
    也可以利用构造函数,如: 
    CString s1("Tom");
     
    5、将CString类型的变量赋给char []类型(字符串)的变量 
    方法一:sprintf()函数 
    CString str = "good"; 
    char tmp[200] ; 
    sprintf(tmp, "%s",(LPCSTR)str); 
    (LPCSTR)str这种强制转换相当于(LPTSTR)(LPCTSTR)str 
    CString类的变量需要转换为(char*)的时,使用(LPTSTR)(LPCTSTR)str
     
    然而,LPCTSTR是const char *,也就是说,得到的字符串是不可写的!将其强制转换成LPTSTR去掉const,是极为危险的! 
    一不留神就会完蛋!要得到char *,应该用GetBuffer()或GetBufferSetLength(),用完后再调用ReleaseBuffer()。
     
    方法二:strcpy()函数 
    CString str; 
    char c[256]; 
    strcpy(c, str);
     
    char mychar[1024]; 
    CString source="Hello"; 
    strcpy((char*)&mychar,(LPCTSTR)source);
     
    6、char*和CString转换
     
    CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓冲区长度。有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数和缓冲区长度被巧妙隐藏。
     
    (1) char*转换成CString
     
    若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:
     
             char chArray[] = "Char test"; 
             TCHAR * p = _T("Char test");( 或LPTSTR p = _T("Char test");) 
             CString theString = chArray; 
             theString.Format(_T("%s"), chArray); 
             theString = p;
     
    (2) CString转换成char*
     
    若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:
     
    方法一,使用强制转换。例如:
     
           CString theString( (_T("Char test ")); 
            LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;
     
    方法二,使用strcpy。例如:
     
           CString theString( (_T("Char test ")); 
           LPTSTR lpsz = new TCHAR[theString.GetLength()+1]; 
            _tcscpy(lpsz, theString);
     
    需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。
     
    方法三,使用CString::GetBuffer。
     
            如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。如果你只是打算修改字符或者截短字符串,例如: 
           CString s(_T("Char test ")); 
            LPTSTR p = s.GetBuffer();
     
            LPTSTR dot = strchr(p, ''.'');
     
             // 在这里添加使用p的代码
     
              if(p != NULL)
     
             *p = _T(''); 
             s.ReleaseBuffer();                     // 使用完后及时释放,以便能使用其它的CString成员函数
     
             在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。
     
    7、CString 转为 int
     
    将字符转换为整数,可以使用atoi、_atoi64或atol。 
       CString aaa = "16" ; 
       int int_chage = atoi(aaa) ;
     
       得到 int_chage = 16
     
       int atoi(const char *nptr); 
       long atol(const char *nptr); 
       long long atoll(const char *nptr); 
       long long atoq(const char *nptr);
     
    8、int 转为 CString 
    而将数字转换为CString变量,可以使用CString的Format函数。如 
    CString s; 
    int i = 64; 
    s.Format("%d", i)
  • 相关阅读:
    linux tar详解
    兼容ie和firefox的日期函数获取两个日期相差的天数
    把Response.Redirect放到TryCatch中出的错误
    如何把string类型转为enum类型

    string.Format的大括号处理
    全国默哀三分钟
    网页快捷键上下翻页(兼容firefox和ie)
    通过免费手机短信来控制电脑“执行者”介绍
    刚刚发现了一个好玩的关于有道的
  • 原文地址:https://www.cnblogs.com/blogpro/p/11426680.html
Copyright © 2020-2023  润新知