青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 54, comments - 32, trackbacks - 0, articles - 0
//========================================================================
//TITLE:
//    MultiByteToWideChar和WideCharToMultiByte用法詳解
//AUTHOR:
//    norains
//DATE:
//    第一版:Monday  25-December -2006
//    增補版:Wednesday 27-December -2006
//    修訂版:Wednesday 14-March-2007 (修正之前的錯誤例子)
//Environment:
//  EVC4.0 + Standard SDK
//========================================================================
 
1.使用方法詳解

  在本文開始之處,先簡要地說一下何為短字符和寬字符.
  所謂的短字符,就是用8bit來表示的字符,典型的應(yīng)用是ASCII碼.而寬字符,顧名思義,就是用16bit表示的字符,典型的有UNICODE.關(guān)于windows下的ASCII和UNICODE的更多信息,可以參考這兩本經(jīng)典著作:《windows 程序設(shè)計》,《windows 核心編程》.這兩本書關(guān)于這兩種字符都有比較詳細(xì)的解說.
 
  寬字符轉(zhuǎn)換為多個短字符是一個難點,不過我們只要掌握到其中的要領(lǐng),便可如魚得水.
  好吧,那就讓我們開始吧.
 
  這個是我們需要轉(zhuǎn)化的多字節(jié)字符串:  
  char sText[20] = {"多字節(jié)字符串!OK!"};
 
  我們需要知道轉(zhuǎn)化后的寬字符需要多少個數(shù)組空間.雖然在這個里程里面,我們可以直接定義一個20*2寬字符的數(shù)組,并且事實上將運行得非常輕松愉快.但假如多字節(jié)字符串更多,達到上千個乃至上萬個,我們將會發(fā)現(xiàn)其中浪費的內(nèi)存將會越來越多.所以以多字節(jié)字符的個數(shù)的兩倍作為寬字符數(shù)組下標(biāo)的聲明絕對不是一個好主意.
  所幸,我們能夠確知所需要的數(shù)組空間.
  我們只需要將MultiByteToWideChar()的第四個形參設(shè)為-1,即可返回所需的短字符數(shù)組空間的個數(shù):
  DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, sText, -1, NULL, 0);
 
  接下來,我們只需要分配響應(yīng)的數(shù)組空間:
  wchar_t *pwText;
  pwText = new wchar_t[dwNum];
  if(!pwText)
  {
   delete []pwText;
  }
 
  接著,我們就可以著手進行轉(zhuǎn)換了.在這里以轉(zhuǎn)換成ASCII碼做為例子:
  MultiByteToWideChar (CP_ACP, 0, psText, -1, sText, dwSize);
 
  最后,使用完畢當(dāng)然要記得釋放占用的內(nèi)存:
  delete []psText;
 
 
  同理,寬字符轉(zhuǎn)為多字節(jié)字符的代碼如下:  
  wchar_t wText[20] = {L"寬字符轉(zhuǎn)換實例!OK!"};
  DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
  char *psText;
  psText = new char[dwNum];
  if(!psText)
  {
   delete []psText;
  }
  WideCharToMultiByte (CP_OEMCP,NULL,lpcwszStr,-1,psText,dwNum,NULL,FALSE);
  delete []psText;
 
   如果之前我們已經(jīng)分配好空間,并且由于字符串較短,可以不理會浪費的空間,僅僅只是想簡單地將短字符和寬字符相互轉(zhuǎn)換,那有沒有什么簡便的方法呢?
   WIN32 API里沒有符合這種要求的函數(shù),但我們可以自己進行封裝:
     
  //-------------------------------------------------------------------------------------
  //Description:
  // This function maps a character string to a wide-character (Unicode) string
  //
  //Parameters:
  // lpcszStr: [in] Pointer to the character string to be converted
  // lpwszStr: [out] Pointer to a buffer that receives the translated string.
  // dwSize: [in] Size of the buffer
  //
  //Return Values:
  // TRUE: Succeed
  // FALSE: Failed
  //
  //Example:
  // MByteToWChar(szA,szW,sizeof(szW)/sizeof(szW[0]));
  //---------------------------------------------------------------------------------------
  BOOL MByteToWChar(LPCSTR lpcszStr, LPWSTR lpwszStr, DWORD dwSize)
  {
    // Get the required size of the buffer that receives the Unicode
    // string.
    DWORD dwMinSize;
    dwMinSize = MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, NULL, 0);
 
    if(dwSize < dwMinSize)
    {
     return FALSE;
    }
 
    
    // Convert headers from ASCII to Unicode.
    MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, lpwszStr, dwMinSize);  
    return TRUE;
  }
 
  //-------------------------------------------------------------------------------------
  //Description:
  // This function maps a wide-character string to a new character string
  //
  //Parameters:
  // lpcwszStr: [in] Pointer to the character string to be converted
  // lpszStr: [out] Pointer to a buffer that receives the translated string.
  // dwSize: [in] Size of the buffer
  //
  //Return Values:
  // TRUE: Succeed
  // FALSE: Failed
  //
  //Example:
  // MByteToWChar(szW,szA,sizeof(szA)/sizeof(szA[0]));
  //---------------------------------------------------------------------------------------
  BOOL WCharToMByte(LPCWSTR lpcwszStr, LPSTR lpszStr, DWORD dwSize)
  {
   DWORD dwMinSize;
   dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
   if(dwSize < dwMinSize)
   {
    return FALSE;
   }
   WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,lpszStr,dwSize,NULL,FALSE);
   return TRUE;
  }
 
 
  使用方法也很簡單,示例如下:
  wchar_t wText[10] = {L"函數(shù)示例"};
  char sText[20]= {0};
  WCharToMByte(wText,sText,sizeof(sText)/sizeof(sText[0]));
  MByteToWChar(sText,wText,sizeof(wText)/sizeof(wText[0]));
 
  這兩個函數(shù)的缺點在于無法動態(tài)分配內(nèi)存,在轉(zhuǎn)換很長的字符串時可能會浪費較多內(nèi)存空間;優(yōu)點是,在不考慮浪費空間的情況下轉(zhuǎn)換較短字符串非常方便.

 
2.MultiByteToWideChar()函數(shù)亂碼的問題

  有的朋友可能已經(jīng)發(fā)現(xiàn),在標(biāo)準(zhǔn)的WinCE4.2或WinCE5.0 SDK模擬器下,這個函數(shù)都無法正常工作,其轉(zhuǎn)換之后的字符全是亂碼.及時更改MultiByteToWideChar()參數(shù)也依然如此.
  不過這個不是代碼問題,其結(jié)癥在于所定制的操作系統(tǒng).如果我們定制的操作系統(tǒng)默認(rèn)語言不是中文,也會出現(xiàn)這種情況.由于標(biāo)準(zhǔn)的SDK默認(rèn)語言為英文,所以肯定會出現(xiàn)這個問題.而這個問題的解決,不能在簡單地更改控制面板的"區(qū)域選項"的"默認(rèn)語言",而是要在系統(tǒng)定制的時候,選擇默認(rèn)語言為"中文".
  系統(tǒng)定制時選擇默認(rèn)語言的位置于:
  Platform -> Setting... -> locale -> default language ,選擇"中文",然后編譯即可.
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲高清av在线| 久久综合影音| 亚洲精品国产精品乱码不99按摩| 欧美一级免费视频| 国产精品专区第二| 欧美在线视频免费| 欧美一区深夜视频| 在线播放豆国产99亚洲| 久久免费视频在线| 欧美不卡视频一区发布| 日韩一级精品视频在线观看| 亚洲精品资源| 国产精品免费视频观看| 久久都是精品| 久久久久成人精品免费播放动漫| 国产综合av| 亚洲第一主播视频| 欧美丝袜一区二区三区| 久久国产精品网站| 欧美 日韩 国产精品免费观看| 一本不卡影院| 午夜精品区一区二区三| 在线播放日韩| aa级大片欧美| 伊人婷婷久久| 日韩视频一区二区在线观看 | 欧美在线国产| 亚洲欧美日韩国产综合| 国内外成人免费激情在线视频网站| 久久久久国产一区二区三区| 久久婷婷国产综合尤物精品| 日韩亚洲视频| 久久成人精品视频| 亚洲老司机av| 香蕉免费一区二区三区在线观看 | 亚洲国产网站| 亚洲香蕉网站| 日韩一级精品视频在线观看| 欧美亚洲综合久久| 亚洲精品之草原avav久久| 亚洲伊人第一页| 亚洲精品社区| 午夜亚洲精品| 夜夜嗨网站十八久久| 久久九九有精品国产23| 亚洲一区在线观看免费观看电影高清| 欧美在线视频免费播放| 夜夜嗨av色综合久久久综合网| 久久国产精品亚洲va麻豆| 亚洲一二三区视频在线观看| 蜜桃av一区| 毛片一区二区三区| 国产亚洲成精品久久| 一本色道久久加勒比88综合| 亚洲第一在线综合在线| 久久成人免费| 欧美在线一二三区| 国产精品对白刺激久久久| 欧美成人一区二区在线| 国产一区二区三区久久精品| 国产精品99久久久久久人| 亚洲人人精品| 欧美激情成人在线视频| 欧美va日韩va| 亚洲国产成人久久综合一区| 久久成人人人人精品欧| 久久精品人人做人人爽| 国产精品视频区| 亚洲视频在线观看一区| 亚洲欧美日韩在线播放| 欧美视频在线观看| 日韩视频―中文字幕| 日韩一级欧洲| 欧美日韩情趣电影| 99在线精品免费视频九九视| 亚洲午夜激情网站| 国产精品高清网站| 亚洲一区二区三区777| 校园春色国产精品| 国产一区日韩一区| 久久免费一区| 亚洲福利视频专区| 亚洲精品一区二区三区四区高清| 欧美成ee人免费视频| 亚洲黄色成人久久久| 一区二区三区精密机械公司 | 在线视频亚洲| 国产欧美91| 久久精品综合一区| 欧美xxx成人| 亚洲乱码国产乱码精品精天堂| 欧美国产日韩在线| 亚洲视频一区在线观看| 久久久爽爽爽美女图片| 91久久久久久国产精品| 欧美理论视频| 亚洲综合精品一区二区| 免费国产一区二区| 亚洲另类自拍| 国产日韩欧美成人| 欧美大片免费| 亚洲欧美视频| 欧美激情一区二区三区四区| 亚洲一级网站| 在线精品视频在线观看高清| 欧美理论在线播放| 欧美专区在线观看一区| 日韩亚洲欧美中文三级| 久久久免费av| 亚洲女性喷水在线观看一区| 亚洲高清久久网| 国产精品日韩精品欧美在线 | 日韩视频在线观看国产| 久久久久在线| 亚洲欧美日韩另类| 在线电影院国产精品| 欧美日韩精品一区二区三区| 中文亚洲字幕| 亚洲精品影视| 久久人人爽爽爽人久久久| 亚洲精品欧美精品| 久久精品亚洲精品| 亚洲伦理久久| 免费不卡中文字幕视频| 日韩视频一区二区| 国产亚洲精品aa| 久久精品一二三| 亚洲一区二区黄色| 亚洲国产精品第一区二区三区| 亚洲欧美日韩在线播放| 亚洲精品一区二区网址| 欧美成人精品一区二区| 久久精品在线播放| 一区二区三欧美| 欧美91精品| 欧美在线观看视频一区二区三区 | 欧美一区二区三区男人的天堂| 99亚洲视频| 亚洲高清免费| 久久久欧美精品sm网站| 亚洲视频精品| 亚洲福利电影| 国产一区二区三区免费不卡| 欧美高清视频www夜色资源网| 性久久久久久久久| 亚洲视频电影图片偷拍一区| 亚洲国产精品传媒在线观看 | 国产一区二区三区在线观看免费视频 | 韩国久久久久| 国产女主播视频一区二区| 欧美激情精品久久久久久黑人 | 久久综合中文| 猫咪成人在线观看| 久久精品视频va| 亚洲午夜精品在线| 亚洲性视频h| 中文国产亚洲喷潮| 日韩视频中午一区| 亚洲精品在线视频| 亚洲激情视频| 亚洲小视频在线观看| 日韩一区二区久久| 日韩视频在线观看国产| 亚洲国产乱码最新视频| 亚洲国产欧美日韩| 亚洲视频精选在线| 亚洲一区二区三区激情| 亚洲午夜精品久久久久久浪潮 | 午夜日韩av| 久久久久久久精| 米奇777在线欧美播放| 蜜桃av噜噜一区| 欧美日韩国内| 国产精品一区二区三区四区五区| 国产精品久久久久久影院8一贰佰 国产精品久久久久久影视 | 亚洲国产精品ⅴa在线观看 | 亚洲性人人天天夜夜摸| 欧美亚洲一区三区| 久久www成人_看片免费不卡| 欧美综合国产精品久久丁香| 久久男人资源视频| 久久综合亚洲社区| 欧美性猛交xxxx免费看久久久| 欧美无砖砖区免费| 国产精品永久免费视频| 精品99一区二区三区| 国产农村妇女毛片精品久久麻豆 | 久久综合激情| 欧美全黄视频| 国产毛片精品国产一区二区三区| 欧美日韩国产综合视频在线| 国产综合婷婷| 亚洲精品一区二区三区婷婷月| 亚洲在线视频网站| 久久人人97超碰人人澡爱香蕉| 久久精品在线观看| 在线视频欧美日韩| 久久久www成人免费毛片麻豆| 欧美刺激午夜性久久久久久久| 国产精品美女久久久久av超清 |