分享

string、wstring、cstring、 char、 tchar、int、dword互转

 禁忌石 2017-04-05
2013-04-11 12:31 966人阅读 评论(0) 收藏 举报
 分类:

目录(?)[+]

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

1》string 转 wstring

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

2》wstring 转 string

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

3》string 转 cstring

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

或:

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

4》cstring 转 string

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

或:

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

或:

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

5》string 转 char *

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

或:

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

6》char* 转 string

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

7》string 转 TCHAR *

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

8》TCHAR * 转 string

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

9》char * 转 int

  1. /* 
  2. string 转 int 
  3. .............................. 
  4. char* 转 int */  
  5. #include <stdlib.h>   
  6.    
  7. int atoi(const char *nptr);   
  8. long atol(const char *nptr);   
  9. long long atoll(const char *nptr);   
  10. long long atoq(const char *nptr);  

10》int 转 char*

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

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

11》wstring 转 Csting

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

12》Cstring 转 wstring

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

13》Cstring 转 char *

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

15》TCHar 转 char

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

16》char 转 tchar

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

17》int 转 CString

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

18》char* 转 CString

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

19》CString 转 int

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

20》int 转 string

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

或:

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

或:

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

21》string 转 wchar_t

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

22》wchar_t 转 string

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多