string, wstring 转换, _wtol等

出处:http://www.cnblogs.com/liuweijian/archive/2011/11/24/2262303.html 
作者: surfur


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

a)CString.format("%s", string.c_str());  


4) CString转string

a)void ConvertCString2string(CString& strSrc,std::string& strDes)
{
#ifndef UNICODE
    strDes = strSrc;
#else USES_CONVERSION;
    strDes = W2A(strSrc.LockBuffer());
    strSrc.UnlockBuffer();
#endif
}


5) string转char *

a)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());


6) char* 转string

string s(char *); //你的只能初始化,在不是初始化的地方最好还是用assign();

string CharToString(char*arr,int count)
{
    string result(arr,4);
    return result;
}



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) string 和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);

std::string 转 long
..............................
int  __cdecl _wtoi(const wchar_t *_Str);
long __cdecl _wtol(const wchar_t *_Str);
__int64 __cdecl _wtoi64(const wchar_t *_Str);



10) int转char*和string
    itoa(i,num,10);



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



12) 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());
    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
    定义了UNICODE宏之后,TCHAR就是宽字符wchar_t,否则TCHAR跟char是一样的^_



//———————————————————————————-
//将 单字节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;
}

//———————————————————————————-
int _tmain(int argc, _TCHAR* argv[])
{
    char*   pChar = “我喜欢char”;
    wchar_t* pWideChar = L”我讨厌wchar_t”;
    wchar_t   tagWideCharList[100] ;
    char   ch = ‘A’;
    char   tagChar[100] = {NULL};
    CString   cStr;
    std::string str;

    // 注:设置语言环境以便输出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 );
}

 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值