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;