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

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在线| 久久久噜噜噜久久中文字幕色伊伊| 羞羞漫画18久久大片| 国产亚洲电影| 欧美一区二区免费视频| 欧美承认网站| 午夜久久tv| 亚洲美女电影在线| 国产日韩欧美制服另类| 国产乱码精品| 国产精品成人观看视频国产奇米| 欧美一区二区视频免费观看| 午夜在线不卡| 亚洲一区二区三区激情| 91久久中文| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲国产精品激情在线观看| 新67194成人永久网站| 久久精品91久久香蕉加勒比| 亚洲天堂av在线免费观看| 亚洲麻豆av| 性欧美xxxx大乳国产app| 美女脱光内衣内裤视频久久影院| 午夜精品视频在线观看一区二区 | 国产欧美一区二区精品性| 欧美日韩三级一区二区| 欧美成人综合在线| 久久尤物电影视频在线观看| 欧美一区二区性| 欧美大片在线看免费观看| 国产精品美女| 国产乱码精品一区二区三| 亚洲黑丝在线| 亚洲精品乱码久久久久久按摩观 | 亚洲第一福利视频| 国产精品免费网站| 在线日韩视频| 欧美一区二区三区精品电影| 欧美一区二视频在线免费观看| 免费亚洲电影在线| 亚洲欧美在线观看| 久久国产精品久久久| 久久久亚洲午夜电影| 欧美性天天影院| 国产伦一区二区三区色一情| 99国产一区| 午夜精品久久久久久久99樱桃| 亚洲高清资源| 日韩视频免费在线| 亚洲一区二区黄| 欧美激情性爽国产精品17p| 欧美日韩一卡| 亚洲精品视频在线观看免费| 裸体丰满少妇做受久久99精品 | 日韩西西人体444www| 老司机精品视频网站| 激情自拍一区| 亚洲毛片播放| 欧美国产精品v| 久久精品国产第一区二区三区| 国产精品一区二区你懂的| 亚洲综合日韩在线| 蜜臀av一级做a爰片久久| 欧美一区二区三区啪啪| 国产日韩欧美一二三区| 久久九九电影| av成人动漫| 久久综合狠狠综合久久综青草| 国产欧美一区二区精品性| 欧美一区二区成人6969| 亚洲一区二区精品在线| 国产精品揄拍500视频| 性色av一区二区三区| 午夜电影亚洲| 亚洲二区免费| 亚洲欧美日本国产专区一区| 免费久久99精品国产| 老司机午夜免费精品视频| 亚洲免费av观看| 中国日韩欧美久久久久久久久| 久久精品一区蜜桃臀影院| 欧美日韩在线精品一区二区三区| 日韩午夜电影av| 一本一本久久| 欧美欧美全黄| 亚洲国产精品成人综合| 亚洲人成毛片在线播放| 久久噜噜亚洲综合| 亚洲精品视频免费观看| 中文av一区特黄| 久久亚洲春色中文字幕| 国内精品国产成人| 亚洲日本成人网| 日韩视频免费观看高清完整版| 国产精品老牛| 欧美成年网站| 久久精品成人欧美大片古装| 亚洲第一精品在线| 在线视频精品一区| 亚洲福利在线视频| 亚洲专区国产精品| 亚洲区国产区| 亚洲电影免费| 国产精品www色诱视频| 麻豆精品在线观看| 国产精品久久久久一区二区三区 | 国外成人免费视频| 欧美一区日韩一区| 欧美电影打屁股sp| 久久亚洲一区二区三区四区| 欧美一区二区免费视频| 日韩视频免费大全中文字幕| 新67194成人永久网站| 中日韩高清电影网| 免费久久99精品国产自| 亚洲经典自拍| 欧美亚洲视频| 亚洲一区激情| 欧美激情中文字幕乱码免费| 久久只精品国产| 国产欧美日韩视频一区二区三区 | 久久久久成人网| 亚洲欧美www| 欧美日韩国产91| 亚洲一区二区三| 亚洲免费人成在线视频观看| 亚洲国产三级| 久久亚洲一区二区三区四区| 久久久久久亚洲综合影院红桃 | 国产一区二区三区奇米久涩| 亚洲精品自在久久| 99精品国产在热久久下载| 麻豆精品在线视频| 99riav久久精品riav| 麻豆精品视频在线观看| 久久一区国产| 尤物精品国产第一福利三区 | 99精品福利视频| 免费亚洲网站| 亚洲高清视频的网址| 亚洲日本欧美天堂| 欧美激情综合| 一本色道久久综合亚洲二区三区| 一区二区三欧美| 欧美一级片久久久久久久| 亚洲女人天堂av| 国产欧美韩日| 蜜臀久久久99精品久久久久久| 一本久久精品一区二区| 国产亚洲一区二区在线观看| 亚洲一区二区成人| 性欧美大战久久久久久久久| 国产精品一区2区| 久久成人国产| 欧美成人一区在线| 99这里只有精品| 久久大逼视频| 美女视频一区免费观看| 亚洲人www| 欧美特黄a级高清免费大片a级| 欧美电影在线观看完整版| 亚洲大黄网站| 欧美日韩情趣电影| 午夜精品久久久久久久白皮肤| 久久久久综合| 99re热精品| 狠狠久久亚洲欧美| 欧美久久99| 欧美专区在线| 久久久www| 亚洲精品久久久久久下一站| 国产精品99一区二区| 欧美一区二区三区视频在线| 欧美国产日本| 亚洲国产成人av好男人在线观看| 欧美国产视频日韩| 亚洲自拍都市欧美小说| 欧美国产日韩免费| 欧美一级播放| 日韩五码在线| 激情综合五月天| 国产精品狠色婷| 免费观看成人www动漫视频| 亚洲先锋成人| 欧美一激情一区二区三区| 亚洲福利一区| 国产亚洲va综合人人澡精品| 欧美激情区在线播放| 久久www免费人成看片高清| 亚洲精品久久久蜜桃| 久久人人爽人人爽| 午夜精品视频在线观看| 亚洲最黄网站| 亚洲欧洲一区二区三区| 国产亚洲日本欧美韩国| 国产精品乱看| 欧美性理论片在线观看片免费| 女同性一区二区三区人了人一| 欧美一级视频精品观看|