1. 程式人生 > >string、wstring、cstring、 char、 tchar、int、dword互轉

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;