zoukankan      html  css  js  c++  java
  • 【转载】string、wstring、cstring、 char、 tchar、int、dword互转

    最近编程一直头痛字集中类型的转化,明知都可以转却总是记不住,不断的上网查来查去,在这里小结一下。以备以后方便使用,当然有些方法可能不是最新的,或者最简单的,但是对于自己已经了解的使用起来应该方便的多:

    1》string 转 wstring

    1
    2
    3
    4
    5
    6
    7
    
    wstring s2ws(const string& s)
    {
       _bstr_t t = s.c_str();
       wchar_t* pwchar = (wchar_t*)t;
       wstring result = pwchar;
       return result;
    }

    2》wstring 转 string

    1
    2
    3
    4
    5
    6
    7
    
    string ws2s(const wstring& ws)
    {
       _bstr_t t = ws.c_str();
       char* pchar = (char*)t;
       string result = pchar;
       return result;
    }

     

    3》string 转 cstring

    1
    2
    
    CString.format("%s", string.c_str());  
    //用c_str()确实比data()要好.

    或:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    CString StringToCString(string str)
    {
       CString result;
       for (int i=0;i<(int)str.length();i++)
       {
          result+=str[i];
       }
       return result;
    }

     

     

    4》cstring 转 string

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    void ConvertCString2string(CString& strSrc,std::string& strDes)
    {
       #ifndef UNICODE
       strDes = strSrc;
       #else USES_CONVERSION;
       strDes = W2A(strSrc.LockBuffer());
       strSrc.UnlockBuffer();
       #endif
    }

    或:

    1
    2
    3
    
    string s(CString.GetBuffer());  
    ReleaseBuffer();
    GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.

    或:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    string CStringToString(CString cstr)
    {
       string result(cstr.GetLength(),'e');
       for (int i=0;i<cstr.GetLength();i++)
       {
           result[i]=(char)cstr[i];
       }
       return result;
    }

     

     

     

    5》string 转 char *

    1
    2
    3
    4
    5
    6
    7
    8
    
    char *p = string.c_str();
    //举例: 
    string aa("aaa");
    char *c=aa.c_str(); 
    string mngName; 
    char t[200]; 
    memset(t,0,200); 
    strcpy(t,mngName.c_str());

    或:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    char *p = new char[sring的长度+1];
    p[string的长度]='/0';
    //但是要注意最后赋值'/0'!!!
     
    char * StringToChar(string &str)
    {
       int len=str.length();
       char * p= new char[len+1];
       for (int i=0;i<len;i++)
       {
          p[i]=str[i];
       }
       p[len]='/0';
    }

     

     

    6》char* 转 string

    1
    2
    3
    4
    5
    6
    7
    8
    
    string s(char *); //你的只能初始化,在不是初始化的地方最好还是用assign();
    string CharToString(char*arr,int count)
    {
       string result(arr,4);
       return result;
    }
    //string是ansi编码字符char
    //TCHAR是unicode编码字符wchar_t

     

     

    7》string 转 TCHAR *

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    /*
      wBuf 申明为指针即可。
    */
    wchar_t *chr2wch(const char *buffer)
    {
            size_t len = strlen(buffer);
            size_t wlen = MultiByteToWideChar(CP_ACP, 0, (const char*)buffer, int(len), NULL, 0);
            wchar_t *wBuf = new wchar_t[wlen + 1];
            MultiByteToWideChar(CP_ACP, 0, (const char*)buffer, int(len), wBuf, int(wlen));
            return wBuf;
    }

     

     

     

    8》TCHAR * 转 string

    1
    2
    3
    4
    5
    6
    7
    8
    
    char * wch2chr(LPCTSTR lpString)
    {
       // Calculate unicode string length.
       UINT len = wcslen(lpString)*2;
       char *buf = (char *)malloc(len);
       UINT i = wcstombs(buf,lpString,len);
       return buf;
    }

     

     

     

    9》char * 转 int

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    /*
    string 转 int
    ..............................
    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);

     

     

    10》int 转 char*

    在stdlib.h中有个函数itoa()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    //itoa(i,num,10); 
    //i 需要转换成字符的数字 
    //num 转换后保存字符的变量 
    //10 转换数字的基数(进制)10就是说按照10进制转换数字。还可以是2,8,16等等你喜欢的进制类型 
    //原形:char *itoa(int value, char* string, int radix); 
     
    #include "stdlib.h" 
    #include "stdio.h" 
    main() 
    { 
       int i=1234; 
       char s[5]; 
       itoa(i,s,10); 
       printf("%s",s); 
       getchar(); 
    }

     

     

     

    11》wstring 转 Csting

    1
    2
    
    //std::wstring转CString
    CString str( filename.c_str() );

     

     

     

    12》Cstring 转 wstring

    1
    2
    
    //CString转std::wstring
    std::wstring str = filename.GetString();

     

     

     

    13》Cstring 转 char *

    1
    2
    3
    4
    5
    
    CString cstr(asdd);
    const char* ch = (LPCTSTR)cstr;
    //举例:
    CString   str= "i   am   good "; 
    char*   lp=str.GetBuffer(str.GetLength());

     

     

     

    15》TCHar 转 char

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    *********************************************************************** 
    * 函数: THCAR2Char 
    * 描述:将TCHAR* 转换为 char* 
    *********************************************************************** 
    char* CPublic::THCAR2char(TCHAR* tchStr) 
    { 
       int iLen = 2*wcslen(tchStr);//CString,TCHAR汉字算一个字符,因此不用普通计算长度 
       char* chRtn = new char[iLen+1] 
       wcstombs(chRtn,tchStr,iLen+1);//转换成功返回为非负值 
       return chRtn; 
    }

     

     

     

    16》char 转 tchar

    定义了UNICODE宏之后,TCHAR就是宽字符wchar_t,否则TCHAR跟char是一样的^_
    str.ReleaseBuffer();

     

     

     

    17》int 转 CString

    1
    2
    3
    
    int iint;
    CString csstr;
    csstr.Format("%d",iint);

     

     

    18》char* 转 CString

    1
    2
    3
    4
    5
    
    CString.format("%s", char*); 
    CString strtest;  
    char * charpoint;  
    charpoint="give string a value";  
    strtest=charpoint; //直接付值

     

     

    19》CString 转 int

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    CString  ss="1212.12";  
    int temp=atoi(ss); //atoi _atoi64或atol
     
    //将字符转换为整数,可以使用atoi、_atoi64或atol。  
    int int_chage = atoi((lpcstr)ss) ;
    //或:
    CString str = "23";
    UINT uint;
    sscanf(str, "%d", uint);

     

     

    20》int 转 string

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
        int n = 65535;
        char t[256];
        string s;
     
        sprintf(t, "%d", n);
        s = t;
        cout << s << endl;
     
        return 0;
    }

    或:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    #include <iostream>
    #include <string>
    #include <sstream>
    using namespace std;
     
    int main()
    {
        int n = 65535;
        strstream ss;
        string s;
        ss << n;
        ss >> s;
        cout << s << endl;
     
        return 0;
    }

    或:

    1
    2
    3
    4
    5
    6
    
    //1.) 
    String s = String.valueOf(i);
    //2.) 
    String s = Integer.toString(i); 
    //3.) 
    String s = "" + i;

     

     

    21》string 转 wchar_t

    1
    2
    3
    
    string sName = "string -> wchar_t";
    wchar_t * wName   = new wchar_t[sName.size()];
    swprintf(wName, L"%S ", sName.c_str());   //注意大写S。。

     

     

    22》wchar_t 转 string

    1
    2
    3
    4
    5
    
    wchar_t wchart[] = L"wchar_t -> string";
    wstring ws = wchart;
    _bstr_t t = ws.c_str();
    char* pchar = (char*)t;
    string result = pchar;

    原文地址:http://www.tiham.com/2011/12/string-wstring-cstring-char-tchar-int-dword.html

  • 相关阅读:
    Screen print or copy
    <转>关于SQL Server数据库的若干注意事项
    sql server 链接到oracle库,读取对应信息
    LinkedServer链接服务器的使用
    序号生成一例
    新解:报表服务器数据库的版本格式无效,或无法读取。已找到的版本为“Unknown”,而所需的版本为“C.0.8.40”。
    GridView to Excel
    sql server临时表是否存在
    <转>SQL Server大表转为分区表实例
    <转> 人生十二个经典领悟
  • 原文地址:https://www.cnblogs.com/xxt1991/p/2420733.html
Copyright © 2011-2022 走看看