vc Ansic-Unicode處理

來源:互聯網
上載者:User

1.ANSIC與Unicode字元

  兩者區別就不多少了,一個單位元組一個雙位元組,Unicode可以表示更多的字元,適合諸如漢字的文字系統.

  定義使用寬字元:

  2.聲明Unicode字元與及字串方法:

  _T()宏需要包含tchar.h

1   wchar_t c=L'A'; 
2   wchar_t szBuffer[10]=L"A String";
3  

  WinNt.h定義了一下宏:

 1 #ifdef UNICODE 
 2  typedef WCHAR TCHAR ,*PTCHAR,PTSTR;
 3  typedef CONST WCHAR *PCTSTR;
 4  #define __TEXT(quote) quote
 5  #define __TEXT(quote) L##quote
 6 
 7  #else
 8  typedef CHAR TCHAR ,*PTCHAR,PTSTR;
 9  typedef CONST CHAR *PCTSTR;
10  #define __TEXT(quote) quote
11 
12  #endif
13  #define __TEXT(quote) quote TEXT(quote)
14 
15  

  可以利用以上宏來定義:在Visual Studio建立工程,一般都開啟了Unicode選項,直接就可以定義寬字元。

1 TCHAR C=TXET('a');//如果定義了Unicode 則是16位字元,否則是8位
2    TCHAR C=L'a';
3   TCHAR szBuffer[10]=TEXT("a String");
4   TCHAR szBuffer[10]=_T("a String");
5  

  3.Ansic與Unicode的轉換:

 1 //定義ANSIC字串
 2    char *c ="Test!";
 3   std::cout<<c<<std::endl;
 4   //ANSIC轉到寬字元
 5    int Length = MultiByteToWideChar(CP_ACP,0,c,-1,NULL,0);
 6   wchar_t *pWideCharStr = new wchar_t[sizeof(wchar_t)*Length];
 7   MultiByteToWideChar(CP_ACP,0,c,6,pWideCharStr,Length*sizeof(wchar_t));
 8   std::wcout<<"MultiByteToWideChar:"<<pWideCharStr<<std::endl;
 9   //寬字元轉換到ANSIC
10    Length = WideCharToMultiByte(CP_ACP,0,pWideCharStr,-1,NULL,0,NULL,NULL);
11   char *pMultiByte = new char[Length*sizeof(char)] ;
12   WideCharToMultiByte(CP_ACP,0,pWideCharStr,-1,pMultiByte,Length*sizeof(char),NULL,NULL);
13   std::cout<<"WideCharToMultiByte:"<<pMultiByte;
14 
15   delete [] pWideCharStr;
16   delete [] pMultiByte;

  4.推薦的字串使用方式

  1).開始將文本字串想像為字元的數組,而不是char或位元組的數組

  2).用通用的資料類型如用TCHAR PTSTR表示字元和字串

  3).統一用TEXT _T宏來表示字面量的字元和字串,不要混用

  4).用BYTE和 PBYTE來表示位元組、位元組指標和資料緩衝區

  5).避免使用printf系列函數,尤其不要使用%s來進行Ansic跟Unicode的互相轉換

  應該使用MultiByteToWideChar和WideCharToMutiByte,具體用法參看MSDN

  6).推薦從現在開始就使用Unicode字元,理由很簡單,為了程式碼的重用性:Com編程模型只支援Unicode   

   微軟.net技術,還有新的API函數都不支援ANSIC

轉載自http://dev.21tx.com/2010/08/04/13200.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.