2013-04-11 12:31 966人阅读 评论(0) 收藏 举报 分类:最近编程一直头痛字集中类型的转化,明知都可以转却总是记不住,不断的上网查来查去,在这里小结一下。以备以后方便使用,当然有些方法可能不是最新的,或者最简单的,但是对于自己已经了解的使用起来应该方便的多: 1》string 转 wstring- 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- string ws2s(const wstring& ws)
- {
- _bstr_t t = ws.c_str();
- char* pchar = (char*)t;
- string result = pchar;
- return result;
- }
3》string 转 cstring- CString.format("%s", string.c_str());
- //用c_str()确实比data()要好.
或: - CString StringToCString(string str)
- {
- CString result;
- for (int i=0;i<(int)str.length();i++)
- {
- result+=str[i];
- }
- return result;
- }
4》cstring 转 string- void ConvertCString2string(CString& strSrc,std::string& strDes)
- {
- #ifndef UNICODE
- strDes = strSrc;
- #else USES_CONVERSION;
- strDes = W2A(strSrc.LockBuffer());
- strSrc.UnlockBuffer();
- #endif
- }
或: - string s(CString.GetBuffer());
- ReleaseBuffer();
- GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
或: - 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 *- 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());
或: - 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- 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 *- /*
- 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- 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- /*
- 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() - //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- //std::wstring转CString
- CString str( filename.c_str() );
12》Cstring 转 wstring- //CString转std::wstring
- std::wstring str = filename.GetString();
13》Cstring 转 char *- CString cstr(asdd);
- const char* ch = (LPCTSTR)cstr;
- //举例:
- CString str= "i am good ";
- char* lp=str.GetBuffer(str.GetLength());
15》TCHar 转 char- ***********************************************************************
- * 函数: 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- int iint;
- CString csstr;
- csstr.Format("%d",iint);
18》char* 转 CString- CString.format("%s", char*);
- CString strtest;
- char * charpoint;
- charpoint="give string a value";
- strtest=charpoint; //直接付值
19》CString 转 int- 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- #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;
- }
或: - #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.)
- String s = String.valueOf(i);
- //2.)
- String s = Integer.toString(i);
- //3.)
- String s = "" + i;
21》string 转 wchar_t- 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- 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./2011/12/string-wstring-cstring-char-tchar-int-dword.html
|