最近在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