<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    C++多字節字符轉換為寬字符的兩種方法

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

     

    目前知道有兩種方式:可以提供寬字符與ANSI字符之間的轉換,

      第一種由COM庫提供的函數

      char*  _com_util::ConvertBSTRToString(BSTR );

      BSTR _com_util::ConvertStringToBSTR(char*);

      Example

      // ConvertBSTRToString.cpp

      #include <comutil.h>

      #include <stdio.h>

      #pragma comment(lib, "comsupp.lib")

      int main()

      {

      BSTR bstrText = ::SysAllocString(L"Test");

      wprintf(L"BSTR text: %s\n", bstrText);

      char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);

      printf("char * text: %s\n", lpszText2);

      SysFreeString(bstrText);

      delete[] lpszText2;

      }

      Output

      BSTR text: Test

      char * text: Test

      第二種標準庫提供的函數

      將寬字符串wcstr轉換為ANSI字符串mbstr

      size_t wcstombs( char *mbstr, const wchar_t *wcstr, size_t count );

      mbstr

      多字節字符的地址

      wcstr

      寬字符的地址

      count

      可以存儲在多字節字符的最大字節數

      將ANSI字符串mbstr轉化為寬字符串wcstr

      size_t mbstowcs( wchar_t *wcstr, const char *mbstr, size_t count );

      Parameters

      wcstr

      寬字符串的地址

      mbstr

      多字節字符串(ANSI)的地址

      count

      要轉換的多字節的字符的個數

      Example

      /* MBSTOWCS.CPP illustrates the behavior of the mbstowcs function

      */

      #include <stdlib.h>

      #include <stdio.h>

      void main( void )

      {

      int i;

      char    *pmbnull  = NULL;

      char    *pmbhello = (char *)malloc( MB_CUR_MAX );

      wchar_t *pwchello = L"Hi";

      wchar_t *pwc      = (wchar_t *)malloc( sizeof( wchar_t ));

      printf( "Convert to multibyte string:\n" );

      i = wcstombs( pmbhello, pwchello, MB_CUR_MAX );

      printf( "\tCharacters converted: %u\n", i );

      printf( "\tHex value of first" );

      printf( " multibyte character: %#.4x\n\n", pmbhello );

      printf( "Convert back to wide-character string:\n" );

      i = mbstowcs( pwc, pmbhello, MB_CUR_MAX );

      printf( "\tCharacters converted: %u\n", i );

      printf( "\tHex value of first" );

      printf( " wide character: %#.4x\n\n", pwc );

      delete[] pmbhello;

      delete[] pwc      ;

      //該例子示例摘自msdn,我覺得這里有內存泄漏,所以我加入了

      //最后兩行,應為這里涉及到動態內存分配,

      //ms-help://MS.MSDNQTR.2003FEB.2052/wcecrt/htm/_wcecrt_mbstowcs.htm

      }

      Output

      Convert to multibyte string:

      Characters converted: 1

      Hex value of first multibyte character: 0x0e1a

      Convert back to wide-character string:

      Characters converted: 1

      Hex value of first wide character: 0x0e1e

      用COM庫的函數需要在轉換完后,自己釋放由COM庫給字符串分配的內存,標準庫提供的函數則要求自己事先非配一個緩存區用來存放,轉換后的字符串.

     

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全