2.1.1 ascii 0-127 7位表示
2.1.2 ascii擴充套件碼 0-255 8位表示
**頁:通過**頁來切換對應的
2.1.3 雙位元組字符集 dbcs
使用乙個或兩個位元組表示字元.
"a中b國"
12 1 2
a: 0x41 中:0x8051
b: 0x42 國:0x8253
1 2 3 4 5 6
0x41 0x80 0x51 0x42 0x82 0x53
a 中 b 國
這樣既包含多位元組又包含單位元組的成為多位元組編碼
2.1.4 unicode
全部使用2個位元組表示字元
"a 中 b 國"
2 2 2 2
a: 0x0041 中:0x8051
b: 0x0042 國:0x8253
1 2 3 4 5 6 7 8
41 00 51 80 42 00 53 82
記憶體/硬碟等資源占用變大.
對程式設計支援度.
char ctext = 'a';
char * psztext = "abcd";
wchar_t ctext = 'a'
wchar_t * psztext = l"abcd";
單字字元的函式,對應有多.寬位元組的函式.
strlen wcslen mbslen
printf wprintf
為了程式中可以方便的支援的unicode和多位元組字元等,所以使用tchar來定義字元和字串.
根據_unicode巨集開關,會將tchar編譯成不同字元型別.
#ifndef _unicode
typedef char tchar
#define __t(x) x
#else
typedef wchar_t tchar
#define __t(x) l##x
#endif
使用時,要增加tchar.h標頭檔案支援,使用
_unicode 巨集開關進行編譯
cl window.c /d_unicode
#define _unicode
#include "tchar.h"
定義方式:
tcahr * psztext = __t("abcdef");
**使用:使用unicode巨集開關,通知
編譯器選擇編譯的**.
#ifndef _unicode
int nlen = strlen( psztext );
#else
int nlen = wcslen( psztext );
#endif
bool writeconsole(
handle hconsoleoutput, //控制台輸出流的控制代碼
const void *lpbuffer,//輸出的字串的指標
dword nnumberofcharstowrite,//輸出的字串的長度
lpdword lpnumberofcharswritten,
// 返回已輸出字元的數量
lpvoid lpreserved ); // 保留值
**例項:
#include "stdafx.h"
#include #include #include #include #include //tchar
void ascii()
printf("\n");
//因為現在是中文字符集 而中文是雙位元組的 所以 128以後的都變成問號了
}void codepage(int ncodepage)
printf("\n");
}void c_char()
void c_wchar()
void tchar()
void printunicode(wchar_t *pszstr)
; for(byte nhigh=0;nhigh<0xff;nhigh++) }
*/}int _tmain(int argc, _tchar* argv)
每個api對多位元組字元和unicode分別有
不同的版本.
messagebox
messageboxa 多位元組字元
messageboxw unicode字元
#ifdef unicode
#define __text(quote) l##quote
#else /* unicode */
#define __text(quote) quote
#endif /* unicode */
tchar * psztext = text( "abcd" );
寬位元組到多位元組
int widechartomultibyte(
uint codepage, //**頁 cp_acp ascii碼
dword dwflags, //轉換方式 0
lpcwstr lpwidecharstr, //需要被轉換wchar位址
int cchwidechar, //需要被轉換wchar的長度
lpstr lpmultibytestr,//用於存放轉換後的結果buff
int cchmultibyte, //buff的長度
lpcstr lpdefaultchar,//使用的預設字串的位址 null
lpbool lpuseddefaultchar //預設字串被使用的標識 0
);多位元組到寬位元組
int multibytetowidechar(
uint codepage,// **頁
dword dwflags,// 轉換方式
lpcstr lpmultibytestr, // 需要被轉換char位址
int cchmultibyte,//需要被轉換char的長度
lpwstr lpwidecharstr,//用於存放轉換後的結果buff
int cchwidechar );//buff的長度
使用方法:
1 將要轉換的字串,傳遞給函式(cchwidechar 或者 cchmultibyte = 0),從 返回值中獲取轉換後字串的元素個數。
2 分配字串空間
3 再次呼叫函式,並將分配的空間傳遞給函式,獲取結果.
4 例子
void mymessagebox()
void multi2wide()
;void wide2multi()
;
Win32程式設計
win32 malloc函式的底層實現是win32api utf 16編碼以16位無符號整數為單位,注意是16位為乙個單位,不是乙個字元就只有16位,這個要看字元的unicode編碼處於什麼範圍而定,有可能是2個位元組,也可能是4個位元組現在機器上的unicode編碼一般就是指utf 16 以兩個位...
WIN32程式設計模板
include lresult callback wndproc hwnd,uint,wparam,lparam int winapi winmain hinstance hinstance,hinstance hprevinstance,pstr szcmdline,int icmdshow te...
win32程式設計 1
1.winmain 1 myregisterclass hinstance 註冊視窗類 2 initinstance 初始化例項 3 while getmessage msg,null,0,0 getmessage從應用程式訊息佇列取乙個訊息,當取到wm quit時,返回假 作業系統向應用程式傳送一...