• 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;
    

  • 相关阅读:
    multipart/form-data同时传递文本和多文件参数controller接收
    sonar配置记录一下经常找不到
    神经网络分类知识蒸馏
    jconsole监听JVM
    Cocos2dx在安卓平台下获取到assets目录下文件的绝对路径
    打印100以内的质数及优化
    VBA调用百度翻译API
    VBA调用百度智能云的文字识别获取图片中的数字
    象棋的思考方法讨论
    やさしい日本語2019 学习方法
  • 原文地址:https://www.cnblogs.com/rainbowzc/p/2422301.html
Copyright © 2020-2023  润新知