多位元組字符集——每個字元的編碼寬度不一,可為乙個位元組或多個位元組。
(1)ascii字元只佔乙個位元組
(2)對於中文、日文等用兩個位元組
(3)乙個字串中,如何區分哪個是中文字元,那個是ascii字元呢?
「windows程式設計」16進製制(10進製)的編碼wi
ndow
s程式設
計6e6fb3 cc
d0 f2
c9 e8
bc c6
-77 -52
-48 -14
-55 -24
-68 -58
①說明:ascii碼為乙個位元組,中文為兩個位元組,均為負數
②優點:節約記憶體。
③缺點:每次查詢,都需要從頭到尾掃瞄,效率低。
char c ="windows程式設計";
printf("%d\n",sizeof(c)); //輸出16,陣列總長度為16位元組,含\0
printf("%d\n",strlen(c)); //輸出15,字元的長度為15個位元組,不含\0
寬位元組字符集——每個字元的編碼寬度都相等,均是兩個位元組
(1)ascii字元的處理。擴充為兩個位元組,在原先的位元組前補充乙個位元組0x00
(2)結束符為兩個\0
(3)字串的解釋都是兩個字元為單位進行的。所以查詢效率快,但記憶體占用大。
「windows程式設計」16進製制的編碼:wi
ndow
s程式設
計006e
006f
7a0b
5e8f
8bbe
8ba1
wchar_t c = l"windows程式設計";
printf("%d\n",sizeof(c)); //輸出24,陣列總長度為16位元組,含結束符
printf("%d\n",wcslen(c)); //輸出11,字元的長度為11個,不含結束符
相容兩種的字符集——如何相容呢?
【例】tchar c = _t("windows程式設計");#ifdef _unicode
#define _tcslen wcslen
#define tchar wchar_t
#define lptstr wchar_t*
#define _t(x) l##x
#else
#define _tcslen strlen
#define tchar char
#define lptstr char*
#define _t(x) x
#endif
字符集的對比//多位元組字符集下
printf("%d\n",sizeof(c)); //16
printf("%d\n",_tcslen(c)); //15
//寬字符集下
printf("%d\n",sizeof(c)); //24
printf("%d\n",_tcslen(c)); //11
ascii
unicode
通用版本
字元型別
char\char
wchar_t\wchar
tchar
函式兩種版本
printf
strlen
messageboxa
wprintf
wcslen
messageboxw
_tprintf
_tcslen
messagebox巨集:text\_text
_t\__t
【例】
windows中的字串函式#include #include #include int main()
通用版本
c語言中的ascii版本
lstrlen
strlen
lstrcpy
strcpy
lstrcpyn
strcpyn
lstrcat
strcat
lstrcmp
strcmp
lstrcmpi
strcmpi
//ascii碼版
int winapi winmain(hinstancehinstance,hinstance hprevinstance,pstr szcmdline,int icmdshow)
//unicode版
int winapi winmain(hinstance hinstance,hinstance hprevinstance, pstr szcmdline, int icmdshow)
//通用版本
int winapi winmain(hinstance hinstance,hinstance hprevinstance, pstr szcmdline, int icmdshow)
寬字元和多位元組字元(mbtowc wctomb)
c 語言原本是在英文環境中設計的,主要的字符集是7 位的ascii 碼。從此開始,8 位的byte 位元組 變成最常見的字元編碼單位,但是國際化軟體必須能夠表示不同的字元,而這些字元數量龐大,無法使用乙個位元組編碼,於是世界上使用各式 各樣多位元組的字元編碼集合已經有數十年了,比如用來表示 非拉丁字...
C C 多位元組字元與寬字元的輸出
使用c 標準庫的iostream,可以方便地將控制台 檔案 字串以及其它可擴充的外部表示作為流來處理,但要處理中文,卻會碰到很多問題。本人原來沒怎麼用過這個iostream,這幾天嘗試用這個寫點東西,一會兒不能輸出中文,一會兒不支援中文檔名的,搞得頭大。網上搜了搜,沒有發現適用於所有情況的解決方案。...
C 多位元組字元與寬位元組字元相互轉換
pragma once class strtransfer 字元型別 wchar t char 獲取字元長度 wcslen strlen 連線兩個字串 wcscat strcpy 複製字串 wcscpy strcpy 比較兩個字串 wcscmp strcmp 具體引數詳見www.linuxidc.c...