LPSTR 与char* ,string之间的类型转换

整合了一下别人的代码。

LPSTR - (long) pointer to string - char *

LPCSTR - (long) pointer to constant string - const char *

LPWSTR - (long) pointer to Unicode (wide) string - wchar_t *

LPCWSTR - (long) pointer to constant Unicode (wide) string - const wchar_t *

LPTSTR - (long) pointer to TCHAR (Unicode if UNICODE is defined, ANSI if not) string - TCHAR *

LPCTSTR - (long) pointer to constant TCHAR string - const TCHAR *

目录

1. TCHAR 转成 string

2. char* 转换成 LPCTSTR

3. LPCTSTR 转换成 char *

4. LPCTSTR转换成string

(1)方法1(适用于没有定义UNICODE)

(2)适用于定义了UNICODE的工程

5. string转换成LPCWSTR 

6. CString转string

(1)

(2)

7. string转CString

8. CString转const char*

(1)(CString转char*转const char*)

(2)(CString 转string转const char*)

9. const char*转CString


1. TCHAR 转成 string

std::string TCHAR2STRING(TCHAR *STR){
    int iLen = WideCharToMultiByte(CP_ACP, 0, STR, -1, NULL, 0, NULL, NULL);
    char* chRtn = new char[iLen * sizeof(char)];
    WideCharToMultiByte(CP_ACP, 0, STR, -1, chRtn, iLen, NULL, NULL);
    std::string str(chRtn);
    return str;
}

2. char* 转换成 LPCTSTR

char ch[1024] = "wo shi xiaoyu";
int num = MultiByteToWideChar(0,0,ch,-1,NULL,0);
wchar_t *wide = new wchar_t[num];
MultiByteToWideChar(0,0,ch,-1,wide,num);

3. LPCTSTR 转换成 char *

wchar_t widestr[1024] = L"wo shi fish";
int num = WideCharToMultiByte(CP_OEMCP,NULL,widestr,-1,NULL,0,NULL,FALSE);
char *pchar = new char[num];
WideCharToMultiByte (CP_OEMCP,NULL,widestr,-1,pchar,num,NULL,FALSE);

4. LPCTSTR转换成string

(1)方法1(适用于没有定义UNICODE)

配置属性 -> C/C++ -> 预处理器 -> 预处理器定义
看看有没有 UNICODE/_UNICODE 有的话就去掉。

std::string texts;

LPCTSTR lpTexts = _T("ABC");

texts = (LPSTR)lpTexts;

(2)适用于定义了UNICODE的工程

    LPCTSTR lpszName = TEXT("Michael");

#ifdef UNICODE

    wstring strName(lpszName);

#else

    string strName(lpszName);

#endif // UNICODE

5. string转换成LPCWSTR 

std::wstring s2ws(const std::string& s)
{
 int len;
 int slength = (int)s.length() + 1;
 len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); 
 wchar_t* buf = new wchar_t[len];
 MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
 std::wstring r(buf);
 delete[] buf;
 return r;
}

std::string s;

#ifdef UNICODE
std::wstring stemp = s2ws(s); // Temporary buffer is required
LPCWSTR result = stemp.c_str();
#else
LPCWSTR result = s.c_str();
#endif

LPCTSTR

6. CString转string

(1)

CString str = _T("CSDN");

USES_CONVERSION;

std::string s(W2A(str));

(2)

CString str = _T("CSDN");

std::string s = (CT2A)str;

7. string转CString

CString str;

std::string s=“CSDN“;

str=s.c_str();

8. CString转const char*

(1)(CString转char*转const char*)

CString str=_T("CSDN");

const char* cstr;

char temp[100];

::wsprintfA(temp, "%ls",(LPCTSTR)str);

cstr = temp;     

(2)(CString 转string转const char*)

CString str = _T("CSDN");

USES_CONVERSION;

std::string s(W2A(str));

const char* cstr = s.c_str();

9. const char*转CString

const char* cstr = "CSDN";

CString str(cstr);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值