最近在vs2005 中进行TCP/IP 编成的时候遇到了一些问题,最终这些问题都迎刃而解 :
TCHAR *wBuff=new TCHAR[256];
memset(wBuff,L'/0',256*sizeof(TCHAR))
mbstowcs(wBuff,s,256);
AfxMessageBox(wBuff);
delete [] wBuff;
但是上边这段代码,在进行汉字的编码的时候出现了乱码,所以无奈之下还要利用MultiByteToWideChar,虽然比较麻烦,代码如下:
TCHAR wStr[10] = {0};
LPWSTR wpStrTest = wStr;
int iRet = 0;
iRet=MultiByteToWideChar(CP_ACP,MB_COMPOSITE,s,len,wpStrTest,9);
wStr[10]='/0';
//------------------------------------------------相关定义--------------------------------------------------
什么是BSTR、LPSTR以及LPWSTR?
BSTR(Basic STRing,Basic字符串)是一个OLECHAR*类型的Unicode字符串。它被描述成一个与自动化相兼容的类型。由于操作系统提供相应的API函数(如SysAllocString)来管理它以及一些默认的调度代码,因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。图1描述了BSTR的结构,其中DWORD值是字符串中实际所占用的字节数,且它的值是字符串中Unicode字符的两倍。
LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。LPSTR被定义成是一个指向以NULL(‘/0’)结尾的8位ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。在VC++中,还有类似的字符串类型,如LPTSTR、LPCTSTR等,它们的含义如图2所示。
例如,LPCTSTR是指“long pointer to a constant generic string”,表示“一个指向一般字符串常量的长指针类型”,与C/C++的const char*相映射,而LPTSTR映射为 char*。
一般地,还有下列类型定义:
#ifdef UNICODE
typedef LPWSTR LPTSTR;
typedef LPCWSTR LPCTSTR;
#else
typedef LPSTR LPTSTR;
typedef LPCSTR LPCTSTR;
#endif
LPSTR 32-bit指针,指向一个字符串 LPCTSTR 32-bit指针,指向一个常数字符串,此字符串可移植到Unicode和DBCS(双字节字集) LPTSTR 32-bit指针,指向一个字符串,此字符串可移植到Unicode和DBCS(双字节字集) LPCSTR 32-bit指针,指向一个常数字符串 LPWSTR 以/0结束的Unicode字符串,即双字节 |
|||
Top | |||
回复人: oldworm(oldworm) ( ) 信誉:108 | 2002-09-24 01:46:53Z | 得分:4 | |
? |
区别楼上已经说了,我不废话,MSDN是这样定义原型的: typedef CONST CHAR *LPCSTR, *PCSTR; typedef LPCSTR LPCTSTR; typedef WCHAR *LPWSTR, *PWSTR; typedef CONST WCHAR *LPCWSTR, *PCWSTR; |