mbstowcs and MultiByteToWideChar

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

原文地址:https://www.cnblogs.com/rainbowzc/p/2422301.html