window programming --Unicode
一 Unicode 簡介
?1 Unicode 是ASCII 擴展,從傳統(tǒng)的7位,擴展位16 位,可以顯示世界上所有語言
ASCII 碼
?????? 0-???? 1-???? 2-???? 3-???? 4-???? 5-???? 6-???? 7-
-0???? NUL??? DLE??? SP???? 0????? @????? P????? `????? p
-1???? SOH??? DC1??? !????? 1????? A????? Q????? a????? q
-2???? STX??? DC2??? "????? 2????? B????? R????? b????? r
-3???? ETX??? DC3??? #????? 3????? C????? S????? c????? s
-4???? EOT??? DC4??? $????? 4????? D????? T????? d????? t
-5???? ENQ??? NAK??? %????? 5????? E????? U????? e????? u
-6???? ACK??? SYN??? &????? 6????? F????? V????? f????? v
-7???? BEL??? ETB??? '????? 7????? G????? W????? g????? w
-8???? BS???? CAN??? (????? 8????? H????? X????? h????? x
-9???? HT???? EM???? )????? 9????? I????? Y????? I????? y
-A???? LF???? SUB??? *????? :????? J????? Z????? j????? z
-B???? VT???? ESC??? +????? ;????? K????? [????? k????? {
-C???? FF???? FS???? ,????? <????? L????? \????? l????? |
-D???? CR???? GS???? -????? =????? M????? ]????? m????? }
-E???? SO???? RS???? .????? >????? N????? ^????? n????? ~
-F???? SI???? US???? /????? ?????? O????? _????? o????? DEL
?2 雙位字符集
DBCS:double-byte character set,最初的128個代碼是ASCII,較高的128個代碼中的某些總是跟隨著第
二個位元組。這兩個位元組一起(稱作首位元組和跟隨位元組)定義一個字元。
?3 Unicode 解決方案
? Unicode是統(tǒng)一的16位元系統(tǒng),也DBCS 這樣的同時含有一位和兩位的字符集不同,Unicode 可以表示
65536 個字符。
? Unicode 的缺點是,Unicode 使用的空間是ASCII 的兩倍
二 寬字符和c
?1 char
? char c='A';
? 變量c 用一個字節(jié)來存儲,用16 進制表示位0x41
? char * p;
? 32 位系統(tǒng),一次指針變量需要用4個字節(jié)表示
? char * p="Hello!";
? 字符串占用7個字節(jié) 其中 6個用于保存字符串,1個用于保存中止符號0
? char [10]
? 占用10個字節(jié)
? char a[]="Hello!";
? 占用 7個字節(jié)
?2 寬字節(jié)
? typedef unsigned short whcar_t?? which is define in the window.h?
? 與unsign short 一樣 為16 字節(jié),兩個字節(jié)
? wchar_t c='A'?? 0x0041
? wchar_t *p=L"Hello!"? 指針占用 4個字節(jié) 而 字符串占用 14 個字節(jié)
?3 寬字元程序庫函數(shù)
? char * pc = "Hello!" ;
? iLength = strlen (pc) ;
? wchar_t * pw = L"Hello!" ;
? iLength = wcslen (pw) ;
?4 維護單一原始碼
?Microsoft Visual C++包含的TCHAR.H
?如果定義了名為_UNICODE的識別字,并且程式中包含了TCHAR.H表頭檔案,那么_tcslen就定義為wcslen
?#define _tcslen wcslen
?如果沒有定義UNICODE,則_tcslen定義為strlen:
?#define _tcslen strlen
?如果定義了 _UNICODE識別字,那么TCHAR就是wchar_t:
?typedef wchar_t TCHAR ;
?否則,TCHAR就是char:
?typedef char TCHAR ;
?如果沒有定義_UNICODE識別字
?#define __T(x) x
?#define _T(x) __T(x)
?#define _TEXT(x) __T(x)
三 寬字節(jié)和windows
? 1 window 頭文件中的類型
? typedef char CHAR ;
? typedef wchar_t WCHAR ;
? typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ;
? typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR ;
? typedef WCHAR * PWCHAR, * LPWCH, * PWCH, * NWPSTR, * LPWSTR, * PWSTR ;
? typedef CONST WCHAR * LPCWCH, * PCWCH, * LPCWSTR, * PCWSTR ;
? #ifdef? UNICODE??????????????????
? typedef WCHAR TCHAR, * PTCHAR ;
? typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;
? typedef LPCWSTR LPCTSTR ;
? #else
? typedef char TCHAR, * PTCHAR ;
? typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;
? typedef LPCSTR LPCTSTR ;
? #endif
? 2 Windows 函數(shù)調(diào)用
? #ifdef UNICODE
? #define MessageBox? MessageBoxW
? #else
? #define MessageBox? MessageBoxA
? #endif
? 3 Windows 的字符函數(shù)
? ILength = lstrlen (pString) ;
? pString = lstrcpy (pString1, pString2) ;
? pString = lstrcpyn (pString1, pString2, iCount) ;
? pString = lstrcat (pString1, pString2) ;
? iComp = lstrcmp (pString1, pString2) ;
? iComp = lstrcmpi (pString1, pString2) ;
? 4 在windows 使用printf
?? windows 并不支持printf 但是可以使用sprintf
?? int printf (const char * szFormat, ...) ;
?? printf ("The sum of %i and %i is %i", 5, 3, 5+3) ;
?? int sprintf (char * szBuffer, const char * szFormat, ...) ;
?? char szBuffer [100] ;
?? sprintf (szBuffer, "The sum of %i and %i is %i", 5, 3, 5+3) ;
?? puts (szBuffer) ;
posted on 2006-09-14 15:12 康文 閱讀(221) 評論(0) 編輯 收藏 所屬分類: c\c++