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

wchar_t

關于wchar_t

在C++標準中,wchar_t是寬字符類型,每個wchar_t類型占2個字節,16位寬。漢字的表示就要用到wchar_t 。char,我們都知道,占一個字節,8位寬。

標準C++中的wprintf()函數以及iostream類庫中的類和對象能提供wchar_t寬字符類型的相關操作。

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

system("pause");

wchar_t 轉換為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 ;

}

其中需要注意的是一個16位的wchar_t需要用兩個8位的char來存儲之。我們可以發現另外一個問題,wchar_t的高位字節應該存儲在char數組的低位字節。

wchar_t *類型 轉為char *類型

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

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

關于system("command")

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

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

而getchar()只是C標準庫里等待一個字符的函數,兩者區別很大。

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

wchar_t*,wchar_t,wchat_t數組,char,char*,char數組,std::string,std::wstring,CString

#include <string>
// 使用CString必須使用MFC,并且不可包含<windows.h>
#define _AFXDLL
#include <afx.h>
using namespace std;
//----------------------------------------------------------------------------------
//將 單字節char* 轉換為 寬字節 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;
}
//----------------------------------------------------------------------------------
// 將 寬字節wchar_t* 轉換 單字節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 轉換為寬字符 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;

// 注:設置語言環境以便輸出WideChar
setlocale(LC_ALL,"chs");

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

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

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

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

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

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

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

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

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

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

// 注:char* 轉換 CString
cStr = pChar;

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

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

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

WideCharToMultiByte()函數

  函數功能:該函數映射一個unicode字符串到一個多字節字符串。

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

  參數:

  CodePage:指定執行轉換的代碼頁,這個參數可以為系統已安裝或有效的任何代碼頁所給定的值。你也可以指定其為下面的任意一值:

  CP_ACP:ANSI代碼頁;CP_MACCP:Macintosh代碼頁;CP_OEMCP:OEM代碼頁;

  CP_SYMBOL:符號代碼頁(42);CP_THREAD_ACP:當前線索ANSI代碼頁;

  CP_UTF7:使用UTF-7轉換;CP_UTF8:使用UTF-8轉換。

  dwFlags:一組位標記用以指出是否未轉換成預作或寬字符(若組合形式存在),是否使用象形文字替代控制字符,以及如何處理無效字符。你可以指定下面是標記常量的組合,含義如下:

  MB_PRECOMPOSED:通常使用預作字符——就是說,由一個基本字符和一個非空字符組成的字符只有一個單一的字符值。這是缺省的轉換選擇。不能與

  MB_COMPOSITE值一起使用。

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

  MB_ERR_INVALID_CHARS:如果函數遇到無效的輸入字符,它將運行失敗,且GetLastErro返回ERROR_NO_UNICODE_TRANSLATION值。

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

  組合字符由一個基礎字符和一個非空字符構成,每一個都有不同的字符值。每個預作字符都有單一的字符值給基礎/非空字符的組成。在字符è中,e就是基礎字符,而重音符標記就是非空字符。

  函數的缺省動作是轉換成預作的形式。如果預作的形式不存在,函數將嘗試轉換成組合形式。

  標記MB_PRECOMPOSED和MB_COMPOSITE是互斥的,而標記MB_USEGLYPHCHARS和MB_ERR_INVALID_CHARS則不管其它標記如何都可以設置。

  lpWideCharStr:指向將被轉換的unicode字符串。

  cchWideChar:指定由參數lpWideCharStr指向的緩沖區的字符個數。如果這個值為-1,字符串將被設定為以NULL為結束符的字符串,并且自動計算長度。

  lpMultiByteStr:指向接收被轉換字符串的緩沖區。

  cchMultiByte:指定由參數lpMultiByteStr指向的緩沖區最大值(用字節來計量)。若此值為零,函數返回lpMultiByteStr指向的目標緩沖區所必需的字節數,在這種情況下,lpMultiByteStr參數通常為NULL。

  lpDefaultChar和pfUsedDefaultChar:只有當WideCharToMultiByte函數遇到一個寬字節字符,而該字符在uCodePage參數標識的代碼頁中并沒有它的表示法時,WideCharToMultiByte函數才使用這兩個參數。如果寬字節字符不能被轉換,該函數便使用lpDefaultChar參數指向的字符。如果該參數是NULL(這是大多數情況下的參數值),那么該函數使用系統的默認字符。該默認字符通常是個問號。這對于文件名來說是危險的,因為問號是個通配符。pfUsedDefaultChar參數指向一個布爾變量,如果Unicode字符串中至少有一個字符不能轉換成等價多字節字符,那么函數就將該變量置為TRUE。如果所有字符均被成功地轉換,那么該函數就將該變量置為FALSE。當函數返回以便檢查寬字節字符串是否被成功地轉換后,可以測試該變量。

  返回值:如果函數運行成功,并且cchMultiByte不為零,返回值是由 lpMultiByteStr指向的緩沖區中寫入的字節數;如果函數運行成功,并且cchMultiByte為零,返回值是接收到待轉換字符串的緩沖區所必需的字節數。如果函數運行失敗,返回值為零。若想獲得更多錯誤信息,請調用GetLastError函數。它可以返回下面所列錯誤代碼:

  ERROR_INSUFFICIENT_BJFFER;ERROR_INVALID_FLAGS;

  ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。

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

ANSI和UNICODE編碼

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

ANSI編碼用0x88~0xFF范圍的2個字節來表示1個字符。

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

我的理解:說白了,ANSI編碼是單字節,Unicode編碼是寬字符。


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/chocolateconanlan/archive/2009/04/09/4058868.aspx

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


只有注冊用戶登錄后才能發表評論。
相關文章:
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2025年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

導航

統計

常用鏈接

留言簿

文章分類

文章檔案

收藏夾

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区在线播放| 久久国产精品久久w女人spa| 美女精品在线观看| 小嫩嫩精品导航| 国产欧美精品va在线观看| 亚洲欧美一区在线| 亚洲综合精品四区| 国产乱子伦一区二区三区国色天香 | 欧美大片免费观看在线观看网站推荐| 性做久久久久久久免费看| 国产香蕉97碰碰久久人人| 久久久久久久国产| 久久久夜精品| 99国产麻豆精品| 夜夜嗨av一区二区三区| 国产精品资源| 免费在线亚洲| 欧美日韩国产在线一区| 亚洲一区二区三区四区五区黄| 中文在线资源观看网站视频免费不卡| 国产精品免费网站在线观看| 欧美中文字幕在线观看| 久久五月天婷婷| 亚洲夜晚福利在线观看| 欧美亚洲免费| 最新国产乱人伦偷精品免费网站| 欧美aaaaaaaa牛牛影院| 免费永久网站黄欧美| 亚洲免费成人av电影| 亚洲免费电影在线观看| 欧美性大战久久久久久久| 先锋影音久久| 久久精品一区二区国产| 国产一区二区成人久久免费影院| 免费看的黄色欧美网站| 欧美成人免费在线视频| 亚洲深夜福利网站| 亚洲欧美激情一区| 国产欧美欧美| 欧美电影在线播放| 欧美日韩午夜剧场| 久久久久国色av免费观看性色| 久久精品国产一区二区三区| 亚洲日本va午夜在线影院| 亚洲精品一二三| 国产精品毛片a∨一区二区三区|国 | 农村妇女精品| 欧美日韩视频专区在线播放| 久久成人免费视频| 久热综合在线亚洲精品| 午夜欧美精品久久久久久久| 久久久免费精品视频| 在线综合视频| 蜜桃av噜噜一区| 午夜精品免费在线| 欧美福利电影在线观看| 欧美有码在线观看视频| 欧美aa在线视频| 欧美在线视频观看| 欧美日韩成人| 蜜臀av性久久久久蜜臀aⅴ| 欧美色欧美亚洲高清在线视频| 久久野战av| 国产精品乱码妇女bbbb| 亚洲精品欧美日韩专区| 在线成人小视频| 亚洲午夜在线| 午夜精品理论片| 欧美日韩在线第一页| 欧美成人免费大片| 好吊妞**欧美| 亚洲欧美激情一区| 亚洲专区免费| 欧美人与禽猛交乱配视频| 老色鬼久久亚洲一区二区| 国产欧美日韩精品丝袜高跟鞋| 亚洲第一区色| 在线观看91精品国产麻豆| 亚洲欧美日韩直播| 亚洲性线免费观看视频成熟| 欧美国产乱视频| 欧美国产日韩精品免费观看| 在线观看国产成人av片| 欧美在线日韩精品| 欧美淫片网站| 国产日韩欧美亚洲| 亚洲欧美资源在线| 亚洲午夜av| 欧美日韩高清免费| 亚洲视屏在线播放| 亚洲欧美99| 国产毛片久久| 久久超碰97中文字幕| 久久久成人精品| 狠狠色综合色综合网络| 欧美自拍丝袜亚洲| 狼狼综合久久久久综合网| 国精产品99永久一区一区| 午夜精品久久久久久久白皮肤| 午夜精品久久久久久久99樱桃| 国产精品久久久久久久久久妞妞 | 国产精品扒开腿爽爽爽视频 | 亚洲电影在线免费观看| 久久中文字幕导航| 亚洲电影在线观看| 99riav久久精品riav| 欧美精品videossex性护士| 99热精品在线| 久久福利毛片| 在线免费精品视频| 欧美久久久久久久久| 一本色道久久综合亚洲精品婷婷| 亚洲性图久久| 国产午夜精品在线| 美女精品在线观看| 一道本一区二区| 欧美一区二区三区在线视频| 国内精品久久久久久| 蜜臀99久久精品久久久久久软件| 欧美福利小视频| 亚洲免费在线视频一区 二区| 国产欧美一区二区精品性| 久久久久免费| 亚洲高清中文字幕| 久久先锋影音av| 一区二区三区回区在观看免费视频| 欧美午夜电影在线| 久久久精品午夜少妇| 亚洲精品网站在线播放gif| 久久精品官网| 日韩一级大片| 国产精品高潮呻吟久久av无限| 校园春色综合网| 9久re热视频在线精品| 另类成人小视频在线| 亚洲性xxxx| 亚洲精品一区二区三区福利| 国产亚洲精品福利| 欧美精品亚洲| 欧美夫妇交换俱乐部在线观看| 亚洲无线一线二线三线区别av| 免费观看成人www动漫视频| 亚洲天堂网在线观看| 在线观看日韩精品| 国产精品一区二区久久久| 欧美成人a∨高清免费观看| 午夜欧美不卡精品aaaaa| 日韩亚洲综合在线| 欧美成人福利视频| 久久视频在线看| 久久精品国产视频| 亚洲一区在线观看视频 | 免费精品视频| 欧美一区二区在线看| 一区二区冒白浆视频| 亚洲欧洲偷拍精品| 免播放器亚洲| 亚洲午夜影视影院在线观看| 亚洲国产日韩欧美在线图片| 激情成人中文字幕| 国产综合视频| 国产一区二区三区直播精品电影| 国产精品护士白丝一区av| 欧美日韩一区二区国产| 欧美日本簧片| 欧美日韩在线播放一区| 欧美精品一区二| 欧美激情综合色综合啪啪| 男女精品视频| 欧美精品1区2区3区| 欧美精品久久99久久在免费线| 欧美不卡在线| 久久午夜av| 欧美日韩精品一区二区在线播放 | 亚洲视频高清| 亚洲自拍偷拍色片视频| 亚洲一区免费| 一本色道久久综合狠狠躁篇的优点| 99精品国产在热久久下载| 99视频日韩| 亚洲一区二区高清| 欧美在线综合| 免费看成人av| 欧美四级在线观看| 国产噜噜噜噜噜久久久久久久久| 国产精品一香蕉国产线看观看| 国产精品午夜在线| 韩国女主播一区| 亚洲国产欧美精品| 99精品欧美一区二区三区综合在线| 日韩亚洲在线观看| 欧美一区二区网站| 久久综合色88| 亚洲国产综合在线| 亚洲永久字幕| 老鸭窝91久久精品色噜噜导演| 久久综合九色99| 国产精品久久久久久久久久尿| 国产亚洲精品aa| 亚洲毛片在线观看|