int WideCharToMultiByte( UINT CodePage, // code page DWORD dwFlags, // performance and mapping flags LPCWSTR lpWideCharStr, // address of wide-character string int cchWideChar, // number of characters in string LPSTR lpMultiByteStr, // address of buffer for new string int cchMultiByte, // size of buffer LPCSTR lpDefaultChar, // address of default for unmappable // characters LPBOOL lpUsedDefaultChar // address of flag set when default // char. used );单字节、多字节之间的转换。
CString cs ("Hello"); // Convert a TCHAR string to a LPCSTR CT2CA pszConvertedAnsiString (cs); // construct a std::string using the LPCSTR input std::string strStd (pszConvertedAnsiString)
直接支持吧CString::GetBuffer()
//unicode下转换 //非unicode下转换
CString <->wstring CString <->string
CString <->wchar_t* CString <->char*
说一下!
CString str;
char Buf[255];// CString ------>WCHAR *
WCHAR *pChar = str.GetBuffer(str.GetLength()); // WCHAR *------->char *
WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)pChar, -1, Buf, sizeof(Buf), NULL, NULL);
str.ReleaseBuffer();
CString str;
wstring wstr = wstring(str.GetBuffer(str.GetLength()));
//CString 为一MFC类,
可以通用.
{
#ifndef UNICODE
strDes = strSrc;
#else
USES_CONVERSION;
strDes = W2A(strSrc.LockBuffer());
strSrc.UnlockBuffer();
#endif
}
void ConvertCString2string(CString& strSrc,std::string& strDes)
{
#ifndef UNICODE
strDes = strSrc; #else
USES_CONVERSION; strDes = W2A(strSrc.LockBuffer());
strSrc.UnlockBuffer();
#endif }
string str2;
str2 = (LPCTSTR)str1
这样不知道行不行
{
#ifndef UNICODE
strDes = strSrc; //能这样直接的赋值么!
#else
USES_CONVERSION;
strDes = W2A(strSrc.LockBuffer()); W2A什么函数呀!~
strSrc.UnlockBuffer();
#endif }
string stlstr="afd";
CString msstr=stlstr.c_str();//给CString赋值可以随意使用Unicode或ANSI字符串,CString会自动转换CString转string:
#include "atlconv.h"
USES_CONVERSION;
CString msstr=_T("salfj");
string stlstr=T2A((LPTSTR)(LPCTSTR)msstr);
wstring stlstrw;
#if UNICODE
stlstrw=(LPTSTR)(LPCTSTR)msstr;
#else
stlstrw=A2W((LPTSTR)(LPCTSTR)msstr);
#endifCString 转 TCHAR* 最简单的方法:(LPTSTR)(LPCTSTR)msstr;
要不就用msstr.GetBuffer();然后msstr.ReleaseBuffer();建议:
#if UNICODE
typedef wstring tstring;
#else
typedef string tstring;
#endif
以后就都使用tstring了,那么不管是否为Unicode,都直接
CString msstr=_T("salfj");
tstring stlstr=(LPTSTR)(LPCTSTR)msstr;
UINT CodePage, // code page
DWORD dwFlags, // performance and mapping flags
LPCWSTR lpWideCharStr, // address of wide-character string
int cchWideChar, // number of characters in string
LPSTR lpMultiByteStr, // address of buffer for new string
int cchMultiByte, // size of buffer
LPCSTR lpDefaultChar, // address of default for unmappable
// characters
LPBOOL lpUsedDefaultChar // address of flag set when default
// char. used
);单字节、多字节之间的转换。
// Convert a TCHAR string to a LPCSTR
CT2CA pszConvertedAnsiString (cs);
// construct a std::string using the LPCSTR input
std::string strStd (pszConvertedAnsiString)
是个思路
CStringW strSrcW(strSrc);const char* p1 = strSrcA;
const WCHAR* p2 = strSrcW;string strDesA((LPCSTR)strSrcA);
wstring strDesW((LPCWSTR)strSrcW);
CString<->CStringW<->std::wstring