string、wstring、cstring、 char、 tchar、int、dword互轉
阿新 • • 發佈:2019-02-08
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 = |
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] |
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; |