string、wstring、cstring、 char、 tchar、int转换方法

string、wstring、cstring、 char、 tchar、int转换方法

(转自:http://www.cnblogs.com/staring-hxs/archive/2013/01/24/2874690.html)

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
方法一、
1
2
3
CString str;
string  str1;
str.format( "%s" , str1.c_str());
1
方法二、
1
CString str;
1
string  str1;
1
str = str1.c_str();
1
方法三、
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
方法一、
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
4
5
6
方法二、
     CString str3;
     string s(str3.GetBuffer()); 
     str3.ReleaseBuffer();
 
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
1
  
1
方法三、
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
方法一、
1
2
3
4
string str1= "Hello" ;
         char  *str2= const_cast < char *>(str1.c_str());
 
方法二、
1
2
3
4
5
6
7
string mngName;
 
      char  t[200];
 
    memset (t,0,200);
 
   strcpy (t,mngName.c_str());


         方法三、

    一个一个字符的赋值
     char *p = new char[sring的长度+1];
     p[string的长度]='/0';
    但是要注意最后赋值'/0'!!!

1
2
3
4
5
6
7
8
9
10
11
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、string s(char *); 你的只能初始化,在不是初始化的地方最好还是用assign();
     2、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
/* 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
char  * wch2chr( LPCTSTR  lpString)
{
UINT  len = wcslen(lpString)*2;
char  *buf = ( char  *) malloc (len);
UINT  i = wcstombs (buf,lpString,len);
return  buf;
}

9、string 和 char* 转int

1
2
3
string 转 int
 
方法一、
1
2
3
4
5
string s = "0xffff" ;
    int  t =0;
    sscanf (s.c_str(), "%x" ,&t);
 
方法二、
1
2
3
4
5
6
7
8
9
10
11
12
string str = "0xffff" ;
     long  t =0;
     t = strtol (str.c_str(), NULL, 16);
 
 
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*和string
      在stdlib.h中有个函数itoa() 
  itoa的用法: 
  itoa(i,num,10); 
i 需要转换成字符的数字 
num 转换后保存字符的变量

11、wstring转Csting
      std::wstring转CString
CString str( filename.c_str() );

12、Cstring转wstring

1
方法一、
1
2
3
4
5
6
CString orig( "Hello, World!" );
size_t  origsize = strlen (orig) + 1;
size_t  convertedChars = 0;
wchar_t  wcstring[MAX_PATH];
mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);
wcscat_s(wcstring, L " (wchar_t *)" );
1
  
1
方法二、
1
2
CString str = _T( "1234" );
std::wstring wstr = ( LPCWSTR )CStringW(str);

13、Cstring转char *

方法一、

1
2
CString str( "aaaaa" );
char  *p = ( LPSTR )( LPCTSTR )str;


方法二、

1
2
3
CString   str= "i   am   good " ;
char *   lp=str.GetBuffer(str.GetLength());
str.ReleaseBuffer();

14、char *转Cstring

1
方法一、
1
2
3
CString   str;
char    pStr[100];
str.Format( "%s " ,pStr);
1
方法二、
1
2
3
CString str;
     char  *p = "hello" ;
     str = p;

15、TCHar转char
*********************************************************************** 
* 函数: THCAR2Char 
* 描述:将TCHAR* 转换为 char* 
***********************************************************************

1
2
3
4
5
6
7
char * 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是一样的^_
 
具体问题具体分析,浮云啊,一切皆是浮云.....


以下摘录自网络:
..............................................................
《C++标准函数库》中说的  
有三个函数可以将字符串的内容转换为字符数组和C—string  
1、data(),返回没有”\0“的字符串数组  
2、c_str(),返回有”\0“的字符串数组  
3、copy() 


//将 单字节char* 转换为 宽字节 wchar*

1
2
3
4
5
6
7
8
9
10
11
inline  wchar_t * AnsiToUnicode( const  char * szStr )
{
int  nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 );
if  (nLen == 0)
{
    return  NULL;
}
wchar_t * pResult = new  wchar_t [nLen];
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen );
return  pResult;
}



// 将 宽字节wchar_t* 转换 单字节char*

1
2
3
4
5
6
7
8
9
10
11
inline  char * UnicodeToAnsi( const  wchar_t * szStr )
{
int  nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );
if  (nLen == 0)
{
    return  NULL;
}
char * pResult = new  char [nLen];
WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );
return  pResult;
}



// 将单字符 string 转换为宽字符 wstring

1
2
3
4
5
6
7
8
9
inline  void  Ascii2WideString( const  std::string& szStr, std::wstring& wszStr )
{
int  nLength = MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, NULL, NULL );
wszStr.resize(nLength);
LPWSTR  lpwszStr = new  wchar_t [nLength];
MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, lpwszStr, nLength );
wszStr = lpwszStr;
delete  [] lpwszStr;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值