string转换

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

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

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(),否则就没有释放缓冲区所占的空间.

5》string转char *

char *p = string.c_str();  

6》char* 转string

string s(char *);  

string是ansi编码字符char
TCHAR是unicode编码字符wchar_t
7》string转TCHAR *

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》string 和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

 itoa(i,num,10); 

11》wstring转Csting

CString str( filename.c_str() ); 

12》Cstring转wstring

std::wstring str = filename.GetString();

13》Cstring转char *

CString cstr(asdd);

const char* ch = (LPCTSTR)cstr;

char*   lp=str.GetBuffer(str.GetLength()); 
str.ReleaseBuffer(); 

14》char *转Cstring

CString   str; 
char   pStr[100]; 
str.Format( "%s ",pStr);

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

具体问题具体分析,浮云啊,一切皆是浮云.....
以下摘录自网络:
..............................................................
《C++标准函数库》中说的  
有三个函数可以将字符串的内容转换为字符数组和C—string  
1.data(),返回没有”/0“的字符串数组  
2.c_str(),返回有”/0“的字符串数组  

3.copy() 
...............................
string 转 CString  
 CString.format("%s", string.c_str());  
用c_str()确实比data()要好.  
...................................................................
#include <string>
// 使用CString必须使用MFC,并且不可包含<windows.h>
#define _AFXDLL
#include <afx.h>
using namespace std;
//———————————————————————————-
//将 单字节char* 转换为 宽字节 wchar*

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*

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

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;
}

//———————————————————————————-
 

// 注:设置语言环境以便输出WideChar
setlocale(LC_ALL,”chs”);
// 注: char* 转换 wchar_t*
// 注: wchar_t 未重载 << ,所以不可使用 cout << 输出
pWideChar = AnsiToUnicode( pChar );
// 注:printf(”%ls”) 和 wprintf(L”%s”) 一致
printf( “%ls/n”, pWideChar );


// 注:wchar_t* 转换 wchar_t[]
wcscpy ( tagWideCharList, pWideChar );
wprintf( L”%s/n”, tagWideCharList );


// 注:wchar_t[] 转换 wchar_t*
pWideChar = tagWideCharList;
wprintf( L”%s/n”, pWideChar );


// 注:char 转换 string
str.insert( str.begin(), ch );
cout << str << endl;


// 注:wchar_t* 转换 string
pWideChar = new wchar_t[str.length()];
swprintf( pWideChar, L”%s”, str.c_str());
wprintf( L”%s/n”, pWideChar );


// 注:string 转换 char*
pChar = const_cast<char*>(str.c_str());
cout << pChar << endl;


// 注:char* 转换 string
str = std::string(pChar);
// 注: cout 的 << 重载了string, 若printf 的话必须 printf(”%s”, str.c_str());
//   而不可 print( “%s”, str ); 因为 str 是个 string 类
cout << str << endl;


// 注:string 转换 char[]
str = “无聊啊无聊”;
strcpy( tagChar, str.c_str() );
printf( “%s/n”, tagChar );


// 注:string 转换 CString;
cStr = str.c_str();


// 注:CString 转换 string
str = string(cStr.GetBuffer(cStr.GetLength()));


// 注:char* 转换 CString
cStr = pChar;


// 注:CString 转换 char*
pChar = cStr.GetBuffer( cStr.GetLength() );


// 注:CString 转换 char[]
strncpy( tagChar, (LPCTSTR)CString, sizeof(tagChar));


// 注:CString 转换 wchar_t*
pWideChar = cStr.AllocSysString();
printf( “%ls/n”, pWideChar );
}
--------------------- 
作者:bingxuebage 
来源:CSDN 
原文:https://blog.csdn.net/bingxuebage/article/details/5930260 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值