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