vc char转string,
字符*转换成CString
若将字符*转换成CString,除了直接赋值外,还可使用CString:格式进行。例如:
char chArray[]=这是一个测试;
char * p=这是一个测试;
或
LPSTR p=这是一个测试;
或在已定义统一码应的用程序中
TCHAR * p=_T(这是一个测试);
或
LPTSTR p=_T(这是一个测试);
CString theString=chArray
绳子. Format(_T(%s ),char ray);
string=p;
CString转换成字符*
若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:
方法一,使用强制转换。例如:
CString字符串(这是测试);
LPTSTR lpsz=(LPTSTR)(LPCTSTR)字符串;
方法二,使用strcpy。例如:
CString字符串(这是测试);
新TCHAR[theString .GetLength()1];
_tcscpy(lpsz,字符串);
需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。
方法三,使用CString:GetBuffer。例如:
CString s(_T(这是测试));
LPTSTR p=s . get buffer();
//在这里添加使用p的代码
如果(p!=NULL)* p=_ T( 0 );
南ReleaseBuffer()。
//使用完后及时释放,以便能使用其它的CString成员函数
字符串转换成字符*
方法一,使用ConvertBSTRToString。例如:
#包含" comutil.h "
#杂注注释(lib, comsupp.lib )
int _tmain(int argc,_TCHAR* argv[]){
BSTR bstr text=:SysAllocString(L test );
char * lpsztext 2=_ com _ util:ConvertBSTRToString(bstr text);
SysFreeString(bstr文本);//用完释放
删除[]lpsztext 2;
返回0;
}
** 此方法不好,会造成内存泄露,SysFreeString也没有效果。
方法二,使用_bstr_t的赋值运算符重载。例如:
_ bstr _ t b=bstrText
char * lpsztext 2=b;
* 不会有内存泄露,推荐方法
字符*转换成字符串
方法一,使用SysAllocString等应用程序接口函数。例如:
BSTR bstr text=:SysAllocString(L test );
BSTR bstr text=:SysAllocStringLen(L test ,4);
BSTR bstr text=:sysallocstring bytelen( Test ,4);
方法二,使用COleVariant或_variant_t例如:
//COleVariant strVar(这是测试);
_variant_t strVar(这是一个测试);
BSTR bstr text=strvar。bstr val
方法三,使用_bstr_t,这是一种最简单的方法。例如:
BSTR bstrText=_bstr_t(这是一个测试);
方法四,使用CComBSTR。例如:
BSTR bstrText=CComBSTR(这是一个测试);
或
CComBSTR bstr(这是一个测试);
BSTR bstr文本=bstr。m _ str
方法五,使用ConvertStringToBSTR。例如:
char * lpszText= Test
BSTR bstr text=_ com _ util:ConvertStringToBSTR(lpszText);
(5)字符串转换成字符串
通常是通过使用cs string:AllocSysString来实现。例如:
CString字符串(这是测试);
BSTR bstrText=str .AllocSysString();
…
SysFreeString(bstr文本);//用完释放
字符串转换成CString
一般可按下列方法进行:
BSTR bstr text=:SysAllocString(L test );
字符串海峡;
海峡empty();
str=bstrText
或
CStringA str(bstr文本);
ANSI、Unicode和宽字符之间的转换
方法一,使用MultiByteToWideChar将美国国家标准学会字符转换成统一码字符,使用WideCharToMultiByte将统一码字符转换成美国国家标准学会字符。
方法二,使用" _T "将美国国家标准学会转换成"一般"类型字符串,使用" L "将美国国家标准学会转换成Unicode,而在托管C环境中还可使用S将美国国家标准学会字符串转换成字符串*对象。例如:
TCHAR tstr[]=_T(这是一个测试);
wchar_t wszStr[]=L 这是一个测试;
字符串* str=S "这是一个测试";
方法三,使用ATL 7.0的转换宏和类8.5升至7.0升.在原有3.0基础上完善和增加了许多字符串转换宏以及提供相应的类。
其中,第一个C代表“类”,便于区分ATL 3.0宏,第二个C代表常量,2代表“到”,EX代表打开一定大小的缓冲区。SourceType和DestinationType可以是A、T、W和OLE,它们的含义分别是ANSI、Unicode、“通用”类型和OLE字符串。比如CA2CT就是把ANSI转换成常用类型的字符串常量。以下是一些示例代码:
LPTSTR tstr=CA2TEX 16(这是一个测试);
LPCTSTR tcstr=CA2CT(这是一个测试);
wchar_t wszStr[]=L 这是一个测试;
char * chstr=CW2A(wszStr);