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

wchar_t

關(guān)于wchar_t

在C++標(biāo)準(zhǔn)中,wchar_t是寬字符類型,每個(gè)wchar_t類型占2個(gè)字節(jié),16位寬。漢字的表示就要用到wchar_t 。char,我們都知道,占一個(gè)字節(jié),8位寬。

標(biāo)準(zhǔn)C++中的wprintf()函數(shù)以及iostream類庫(kù)中的類和對(duì)象能提供wchar_t寬字符類型的相關(guān)操作。

locale loc( "chs" );//定義“區(qū)域設(shè)置”為中文方式
wcout.imbue( loc );//載入中文字符輸入方式
wchar_t str[]=L"中國(guó)";//定義寬字符數(shù)組,注意L是大寫(xiě)
wcout<<str<<endl;//顯示寬字符數(shù)組,下同
wprintf(str);

system("pause");

wchar_t 轉(zhuǎn)換為char 的代碼如下:

有如下的wchar_t和char變量

wchar_t w_cn = '中';
char c_cn[2] = {'0'} ;

char *C2W(wchar_t w_cn , char c_cn[2])

{

//following code convert wchar to char
c_cn[0] = w_cn >> 8 ;
c_cn[1] = w_cn ;
c_cn[2] = '\0';

return c_cn ;

}

其中需要注意的是一個(gè)16位的wchar_t需要用兩個(gè)8位的char來(lái)存儲(chǔ)之。我們可以發(fā)現(xiàn)另外一個(gè)問(wèn)題,wchar_t的高位字節(jié)應(yīng)該存儲(chǔ)在char數(shù)組的低位字節(jié)。

wchar_t *類型 轉(zhuǎn)為char *類型

 CString strName("listen");
 char *pcstr = (char *)new char[2 * strName.GetLength()+1] ;

 WideCharToMultiByte(   CP_ACP,  
  0,  
  strName,     //   要轉(zhuǎn)換的wchar_t*  
  -1,  
  pcstr,   //   接收char*的緩沖區(qū)指針  
  2 * strName.GetLength()+1,         //   pcstr的緩沖區(qū)的大小  
  NULL,  
  NULL   );

關(guān)于system("command")

system("command")是執(zhí)行一個(gè)dos命令。system("pause")就是執(zhí)行Dos命令pause,等待用戶輸入。
system("pause") 與getchar()區(qū)別

system("pause") 是調(diào)用WINDOWS CONSOLE APP下的命令 PAUSE的。
system("const char*")就是調(diào)用WINDOWS CONSOLE APP下的命令。
比如system("exit");
system("ping 192.168.0.1")等等

而getchar()只是C標(biāo)準(zhǔn)庫(kù)里等待一個(gè)字符的函數(shù),兩者區(qū)別很大。

/*---------------------------------------------------*/
如何使system("pause") 不彈出“按任意鍵繼續(xù)”這幾個(gè)字呢?
用system("pause>nul")  就可以了

wchar_t*,wchar_t,wchat_t數(shù)組,char,char*,char數(shù)組,std::string,std::wstring,CString

#include <string>
// 使用CString必須使用MFC,并且不可包含<windows.h>
#define _AFXDLL
#include <afx.h>
using namespace std;
//----------------------------------------------------------------------------------
//將 單字節(jié)char* 轉(zhuǎn)換為 寬字節(jié) wchar*
inline wchar_t* AnsiToUnicode( const char* szStr )
{
int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 );
if (nLen == 0)
{
   return NULL;
}
wchar_t* pResult = new wchar_t[nLen];
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen );
return pResult;
}
//----------------------------------------------------------------------------------
// 將 寬字節(jié)wchar_t* 轉(zhuǎn)換 單字節(jié)char*
inline char* UnicodeToAnsi( const wchar_t* szStr )
{
int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );
if (nLen == 0)
{
   return NULL;
}
char* pResult = new char[nLen];
WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );
return pResult;
}
//----------------------------------------------------------------------------------
// 將單字符 string 轉(zhuǎn)換為寬字符 wstring
inline void Ascii2WideString( const std::string& szStr, std::wstring& wszStr )
{
int nLength = MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, NULL, NULL );
wszStr.resize(nLength);
LPWSTR lpwszStr = new wchar_t[nLength];
MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, lpwszStr, nLength );
wszStr = lpwszStr;
delete [] lpwszStr;
}
//----------------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
char*   pChar = "我喜歡char";
wchar_t* pWideChar = L"我討厭wchar_t";
wchar_t   tagWideCharList[100] ;
char   ch = 'A';
char   tagChar[100] = {NULL};
CString   cStr;
std::string str;

// 注:設(shè)置語(yǔ)言環(huán)境以便輸出WideChar
setlocale(LC_ALL,"chs");

// 注: char* 轉(zhuǎn)換 wchar_t*
// 注: wchar_t 未重載 << ,所以不可使用 cout << 輸出
pWideChar = AnsiToUnicode( pChar );
// 注:printf("%ls") 和 wprintf(L"%s") 一致
printf( "%ls\n", pWideChar );

// 注:wchar_t* 轉(zhuǎn)換 wchar_t[]
wcscpy ( tagWideCharList, pWideChar );
wprintf( L"%s\n", tagWideCharList );

// 注:wchar_t[] 轉(zhuǎn)換 wchar_t*
pWideChar = tagWideCharList;
wprintf( L"%s\n", pWideChar );

// 注:char 轉(zhuǎn)換 string
str.insert( str.begin(), ch );
cout << str << endl;

// 注:wchar_t* 轉(zhuǎn)換 string
pWideChar = new wchar_t[str.length()];
swprintf( pWideChar, L"%s", str.c_str());
wprintf( L"%s\n", pWideChar );

// 注:string 轉(zhuǎn)換 char*
pChar = const_cast<char*>(str.c_str());
cout << pChar << endl;

// 注:char* 轉(zhuǎn)換 string
str = std::string(pChar);
// 注: cout 的 << 重載了string, 若printf 的話必須 printf("%s", str.c_str());
//   而不可 print( "%s", str ); 因?yàn)?str 是個(gè) string 類
cout << str << endl;

// 注:string 轉(zhuǎn)換 char[]
str = "無(wú)聊啊無(wú)聊";
strcpy( tagChar, str.c_str() );
printf( "%s\n", tagChar );

// 注:string 轉(zhuǎn)換 CString;
cStr = str.c_str();

// 注:CString 轉(zhuǎn)換 string
str = string(cStr.GetBuffer(cStr.GetLength()));

// 注:char* 轉(zhuǎn)換 CString
cStr = pChar;

// 注:CString 轉(zhuǎn)換 char*
pChar = cStr.GetBuffer( cStr.GetLength() );

// 注:CString 轉(zhuǎn)換 char[]
strncpy( tagChar, (LPCTSTR)CString, sizeof(tagChar));

// 注:CString 轉(zhuǎn)換 wchar_t*
pWideChar = cStr.AllocSysString();
printf( "%ls\n", pWideChar );
}

WideCharToMultiByte()函數(shù)

  函數(shù)功能:該函數(shù)映射一個(gè)unicode字符串到一個(gè)多字節(jié)字符串。

  函數(shù)原型:int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPWSTR lpWideCharStr, int cchWideChar, LPCSTR lpMultiByteStr, int cchMultiByte, LPCSTR lpDefaultChar, PBOOL pfUsedDefaultChar );

  參數(shù):

  CodePage:指定執(zhí)行轉(zhuǎn)換的代碼頁(yè),這個(gè)參數(shù)可以為系統(tǒng)已安裝或有效的任何代碼頁(yè)所給定的值。你也可以指定其為下面的任意一值:

  CP_ACP:ANSI代碼頁(yè);CP_MACCP:Macintosh代碼頁(yè);CP_OEMCP:OEM代碼頁(yè);

  CP_SYMBOL:符號(hào)代碼頁(yè)(42);CP_THREAD_ACP:當(dāng)前線索ANSI代碼頁(yè);

  CP_UTF7:使用UTF-7轉(zhuǎn)換;CP_UTF8:使用UTF-8轉(zhuǎn)換。

  dwFlags:一組位標(biāo)記用以指出是否未轉(zhuǎn)換成預(yù)作或?qū)捵址ㄈ艚M合形式存在),是否使用象形文字替代控制字符,以及如何處理無(wú)效字符。你可以指定下面是標(biāo)記常量的組合,含義如下:

  MB_PRECOMPOSED:通常使用預(yù)作字符——就是說(shuō),由一個(gè)基本字符和一個(gè)非空字符組成的字符只有一個(gè)單一的字符值。這是缺省的轉(zhuǎn)換選擇。不能與

  MB_COMPOSITE值一起使用。

  MB_COMPOSITE:通常使用組合字符——就是說(shuō),由一個(gè)基本字符和一個(gè)非空字符組成的字符分別有不同的字符值。這是缺省的轉(zhuǎn)換選擇。不能與MB_PRECOMPOSED值一起使用。

  MB_ERR_INVALID_CHARS:如果函數(shù)遇到無(wú)效的輸入字符,它將運(yùn)行失敗,且GetLastErro返回ERROR_NO_UNICODE_TRANSLATION值。

  MB_USEGLYPHCHARS:使用象形文字替代控制字符。

  組合字符由一個(gè)基礎(chǔ)字符和一個(gè)非空字符構(gòu)成,每一個(gè)都有不同的字符值。每個(gè)預(yù)作字符都有單一的字符值給基礎(chǔ)/非空字符的組成。在字符è中,e就是基礎(chǔ)字符,而重音符標(biāo)記就是非空字符。

  函數(shù)的缺省動(dòng)作是轉(zhuǎn)換成預(yù)作的形式。如果預(yù)作的形式不存在,函數(shù)將嘗試轉(zhuǎn)換成組合形式。

  標(biāo)記MB_PRECOMPOSED和MB_COMPOSITE是互斥的,而標(biāo)記MB_USEGLYPHCHARS和MB_ERR_INVALID_CHARS則不管其它標(biāo)記如何都可以設(shè)置。

  lpWideCharStr:指向?qū)⒈晦D(zhuǎn)換的unicode字符串。

  cchWideChar:指定由參數(shù)lpWideCharStr指向的緩沖區(qū)的字符個(gè)數(shù)。如果這個(gè)值為-1,字符串將被設(shè)定為以NULL為結(jié)束符的字符串,并且自動(dòng)計(jì)算長(zhǎng)度。

  lpMultiByteStr:指向接收被轉(zhuǎn)換字符串的緩沖區(qū)。

  cchMultiByte:指定由參數(shù)lpMultiByteStr指向的緩沖區(qū)最大值(用字節(jié)來(lái)計(jì)量)。若此值為零,函數(shù)返回lpMultiByteStr指向的目標(biāo)緩沖區(qū)所必需的字節(jié)數(shù),在這種情況下,lpMultiByteStr參數(shù)通常為NULL。

  lpDefaultChar和pfUsedDefaultChar:只有當(dāng)WideCharToMultiByte函數(shù)遇到一個(gè)寬字節(jié)字符,而該字符在uCodePage參數(shù)標(biāo)識(shí)的代碼頁(yè)中并沒(méi)有它的表示法時(shí),WideCharToMultiByte函數(shù)才使用這兩個(gè)參數(shù)。如果寬字節(jié)字符不能被轉(zhuǎn)換,該函數(shù)便使用lpDefaultChar參數(shù)指向的字符。如果該參數(shù)是NULL(這是大多數(shù)情況下的參數(shù)值),那么該函數(shù)使用系統(tǒng)的默認(rèn)字符。該默認(rèn)字符通常是個(gè)問(wèn)號(hào)。這對(duì)于文件名來(lái)說(shuō)是危險(xiǎn)的,因?yàn)閱?wèn)號(hào)是個(gè)通配符。pfUsedDefaultChar參數(shù)指向一個(gè)布爾變量,如果Unicode字符串中至少有一個(gè)字符不能轉(zhuǎn)換成等價(jià)多字節(jié)字符,那么函數(shù)就將該變量置為T(mén)RUE。如果所有字符均被成功地轉(zhuǎn)換,那么該函數(shù)就將該變量置為FALSE。當(dāng)函數(shù)返回以便檢查寬字節(jié)字符串是否被成功地轉(zhuǎn)換后,可以測(cè)試該變量。

  返回值:如果函數(shù)運(yùn)行成功,并且cchMultiByte不為零,返回值是由 lpMultiByteStr指向的緩沖區(qū)中寫(xiě)入的字節(jié)數(shù);如果函數(shù)運(yùn)行成功,并且cchMultiByte為零,返回值是接收到待轉(zhuǎn)換字符串的緩沖區(qū)所必需的字節(jié)數(shù)。如果函數(shù)運(yùn)行失敗,返回值為零。若想獲得更多錯(cuò)誤信息,請(qǐng)調(diào)用GetLastError函數(shù)。它可以返回下面所列錯(cuò)誤代碼:

  ERROR_INSUFFICIENT_BJFFER;ERROR_INVALID_FLAGS;

  ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。

  注意:指針lpMultiByteStr和lpWideCharStr必須不一樣。如果一樣,函數(shù)將失敗,GetLastError將返回ERROR_INVALID_PARAMETER的值。

ANSI和UNICODE編碼

二者都是字符代碼的一種表示形式

ANSI編碼用0x88~0xFF范圍的2個(gè)字節(jié)來(lái)表示1個(gè)字符。

Unicode編碼是國(guó)際組織指定的可以容納世界上所有文字和服的字符的字符編碼方案。用數(shù)字0~0x10FFFF來(lái)映射這些字符。

我的理解:說(shuō)白了,ANSI編碼是單字節(jié),Unicode編碼是寬字符。


本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/chocolateconanlan/archive/2009/04/09/4058868.aspx

posted on 2011-06-04 17:00 Hsssssss 閱讀(1490) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++知識(shí)


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
相關(guān)文章:
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


<2011年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿

文章分類

文章檔案

收藏夾

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            99re8这里有精品热视频免费| 亚洲黄色天堂| 欧美一区二区啪啪| 国产亚洲一区二区三区| 欧美一区二区三区免费观看视频 | 999在线观看精品免费不卡网站| 欧美国产日韩一区二区在线观看| 欧美成人激情视频| 一本久道综合久久精品| 国产精品伊人日日| 欧美一区1区三区3区公司| 亚洲国产99精品国自产| 久久一区免费| 亚洲精品久久嫩草网站秘色| 欧美一级专区| 久久亚洲色图| 亚洲欧美另类中文字幕| 亚洲欧洲一区二区三区在线观看| 国产伦精品一区二区三区视频黑人 | 国产偷久久久精品专区| 欧美高清视频一区二区| 日韩写真在线| 欧美一区二区三区四区在线观看地址| 亚洲自拍偷拍福利| 伊人一区二区三区久久精品| 国产精品成人观看视频免费| 久久久国产一区二区三区| 亚洲永久视频| 亚洲开发第一视频在线播放| 欧美激情一区二区在线| 一本大道久久a久久精二百| 91久久在线观看| 亚洲欧美在线免费观看| 欧美一区免费| 欧美日韩国产系列| 欧美大片在线观看| 欧美成人嫩草网站| 国产毛片一区二区| 一本色道久久综合精品竹菊| 亚洲美女精品成人在线视频| 在线观看一区欧美| 亚洲成色777777在线观看影院| 一本色道久久综合精品竹菊 | 午夜精品偷拍| 亚洲视频高清| 欧美在线三区| 欧美中文在线视频| 亚洲茄子视频| 欧美成人影音| 亚洲第一免费播放区| 欧美自拍偷拍| 亚洲一区二区三区精品视频| 欧美日韩国产影院| 亚洲美女在线观看| 欧美成人在线免费视频| 亚洲国产影院| 亚洲欧美成人网| 久久久综合视频| 欧美成人一区二区在线 | 欧美刺激性大交免费视频| 国产日韩视频| 久久精品亚洲一区二区三区浴池| 亚洲免费在线视频一区 二区| 亚洲精品一二区| 欧美精品黄色| 国产专区综合网| 一区二区av在线| 亚洲精品亚洲人成人网| 欧美日韩另类综合| 国产一区二区三区久久悠悠色av | 欧美永久精品| 亚洲区国产区| 欧美精品v国产精品v日韩精品| 亚洲国产91色在线| 欧美伊人久久久久久久久影院| 中文在线一区| 亚洲精品中文在线| 日韩视频在线免费| 亚洲午夜影视影院在线观看| 欧美一区二区播放| 午夜免费在线观看精品视频| 欧美激情精品久久久久久黑人| 亚洲精品偷拍| 免费成人你懂的| 亚洲一区影院| 韩国欧美一区| 性做久久久久久久久| 亚洲成色777777在线观看影院| 亚洲素人一区二区| 欧美久久视频| 亚洲精品乱码久久久久久日本蜜臀| 亚洲高清在线视频| 国产精品嫩草久久久久| 中文久久精品| 性色av一区二区三区在线观看| 一区三区视频| 久久人人97超碰精品888| 在线综合+亚洲+欧美中文字幕| 国产啪精品视频| 欧美诱惑福利视频| 久久婷婷综合激情| 亚洲男人av电影| 免费成人黄色av| 亚洲人妖在线| 亚洲欧美色婷婷| 亚洲精品一二三| 欧美一区二区三区四区夜夜大片| 亚洲久色影视| 久久精品国产成人| 激情五月***国产精品| 亚洲理伦电影| 亚洲国产精品999| 午夜精品美女久久久久av福利| 亚洲精品久久久久久下一站| 欧美中文字幕不卡| 亚洲影院一区| 欧美日韩高清不卡| 亚洲国产国产亚洲一二三| 国产亚洲视频在线观看| 一区二区成人精品 | 牛人盗摄一区二区三区视频| 国产美女在线精品免费观看| 日韩视频免费在线观看| 亚洲欧洲日本专区| 久久一区二区三区av| 久久久久九九九九| 国产午夜精品美女视频明星a级| 在线亚洲精品福利网址导航| 日韩亚洲欧美高清| 欧美精选午夜久久久乱码6080| 亚洲国产成人久久综合一区| 亚洲视屏在线播放| 亚洲午夜久久久久久久久电影院 | 一区二区三区视频在线观看| 亚洲精品视频中文字幕| 欧美国产第一页| 亚洲国产精品久久人人爱蜜臀 | 久久久久久国产精品mv| 国产精品久久久久久久久久免费 | 亚洲一区二区毛片| 亚洲一区二区在线免费观看视频| 欧美精品系列| 9久re热视频在线精品| 夜夜嗨av色一区二区不卡| 欧美日韩成人网| 中日韩午夜理伦电影免费| 午夜精品福利一区二区三区av | 午夜伦欧美伦电影理论片| 午夜视频一区在线观看| 国产亚洲美州欧州综合国| 欧美制服丝袜第一页| 欧美成人三级在线| 日韩视频在线一区二区| 欧美午夜不卡视频| 欧美高清在线| 亚洲激情黄色| 欧美一区网站| 久久在线免费视频| 亚洲黄色一区| 欧美日韩国产黄| 亚洲欧美日韩精品综合在线观看| 久久久亚洲午夜电影| 亚洲黄色在线视频| 欧美三级乱人伦电影| 亚洲国产1区| 亚洲一区二区三区在线观看视频| 国产精品激情偷乱一区二区∴| 亚洲欧美国产视频| 欧美成人高清| 午夜精品久久久久久久蜜桃app| 国产精品美女久久久久久久| 欧美主播一区二区三区| 欧美华人在线视频| 亚洲欧美日韩中文在线制服| 韩国精品主播一区二区在线观看| 欧美jizz19hd性欧美| 欧美在线网址| 亚洲青涩在线| 国内精品久久久久影院薰衣草| 欧美第一黄色网| 欧美亚洲尤物久久| 亚洲直播在线一区| 在线观看一区二区视频| 欧美三级乱码| 欧美www视频| 亚洲欧美综合精品久久成人| 亚洲国产成人在线| 久久综合久久综合久久| 亚洲在线视频观看| 99riav久久精品riav| 怡红院精品视频| 国产精品每日更新| 欧美日韩国产二区| 欧美jizzhd精品欧美巨大免费| 欧美一区二区播放| 亚洲永久免费精品| 一区二区高清| 亚洲精品在线看| 亚洲人成艺术| 久久久精品免费视频|