window programming --Unicode

          一 Unicode 簡(jiǎn)介
          ?1 Unicode 是ASCII 擴(kuò)展,從傳統(tǒng)的7位,擴(kuò)展位16 位,可以顯示世界上所有語(yǔ)言
          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個(gè)代碼是ASCII,較高的128個(gè)代碼中的某些總是跟隨著第

          二個(gè)位元組。這兩個(gè)位元組一起(稱作首位元組和跟隨位元組)定義一個(gè)字元。

          ?3 Unicode 解決方案
          ? Unicode是統(tǒng)一的16位元系統(tǒng),也DBCS 這樣的同時(shí)含有一位和兩位的字符集不同,Unicode 可以表示

          65536 個(gè)字符。
          ? Unicode 的缺點(diǎn)是,Unicode 使用的空間是ASCII 的兩倍
          二 寬字符和c
          ?1 char
          ? char c='A';
          ? 變量c 用一個(gè)字節(jié)來(lái)存儲(chǔ),用16 進(jìn)制表示位0x41
          ? char * p;
          ? 32 位系統(tǒng),一次指針變量需要用4個(gè)字節(jié)表示
          ? char * p="Hello!";
          ? 字符串占用7個(gè)字節(jié) 其中 6個(gè)用于保存字符串,1個(gè)用于保存中止符號(hào)0
          ? char [10]
          ? 占用10個(gè)字節(jié)
          ? char a[]="Hello!";
          ? 占用 7個(gè)字節(jié)
          ?2 寬字節(jié)
          ? typedef unsigned short whcar_t?? which is define in the window.h?
          ? 與unsign short 一樣 為16 字節(jié),兩個(gè)字節(jié)
          ? wchar_t c='A'?? 0x0041
          ? wchar_t *p=L"Hello!"? 指針占用 4個(gè)字節(jié) 而 字符串占用 14 個(gè)字節(jié)
          ?3 寬字元程序庫(kù)函數(shù)
          ? char * pc = "Hello!" ;
          ? iLength = strlen (pc) ;
          ? wchar_t * pw = L"Hello!" ;
          ? iLength = wcslen (pw) ;
          ?4 維護(hù)單一原始碼
          ?Microsoft Visual C++包含的TCHAR.H
          ?如果定義了名為_UNICODE的識(shí)別字,并且程式中包含了TCHAR.H表頭檔案,那么_tcslen就定義為wcslen
          ?#define _tcslen wcslen
          ?如果沒有定義UNICODE,則_tcslen定義為strlen:
          ?#define _tcslen strlen
          ?如果定義了 _UNICODE識(shí)別字,那么TCHAR就是wchar_t:
          ?typedef wchar_t TCHAR ;
          ?否則,TCHAR就是char:
          ?typedef char TCHAR ;

          ?如果沒有定義_UNICODE識(shí)別字
          ?#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 康文 閱讀(224) 評(píng)論(0)  編輯  收藏 所屬分類: c\c++

          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 盘锦市| 三门峡市| 泸西县| 宁晋县| 古蔺县| 浦县| 紫阳县| 涿鹿县| 隆尧县| 蒙城县| 漯河市| 宜宾市| 大渡口区| 息烽县| 大邑县| 肇庆市| 中方县| 上饶市| 云和县| 金湖县| 朝阳区| 湟中县| 杂多县| 石城县| 宁武县| 澄迈县| 新昌县| 桃园县| 宣汉县| 鄂伦春自治旗| 南康市| 石屏县| 广宗县| 桓台县| 巴南区| 通海县| 高清| 兴安盟| 额尔古纳市| 夹江县| 威信县|