1. 程式人生 > >Windows程式設計--寬位元組和多位元組

Windows程式設計--寬位元組和多位元組

多位元組字符集:

每個字元的編碼寬度都不等,可以是一個位元組,也可以是多個位元組。
1)ASCII字元只佔用一個位元組;

2)對於中文、日文等象形文字,一個字元佔用兩個位元組。

sizeof("12你好"); //7. \0算上
strlen("12你好"); //6

缺點:每次查詢,都需要從頭到尾掃描,以確定字元,效率低。
有點:節省記憶體。

寬位元組字符集:

每個字元的編碼寬度都相等,均是兩個位元組。
1)ASCII字元佔用擴充為兩個位元組,在原先的位元組前補充一個位元組0x00 ;
2)結束符為兩個\0 ;
3)字串的解釋都是以兩個字元為單位進行解釋,所以查詢速度快。

sizeof("12你好"); //10. \0算上
wcslen("12你好"); //8

缺點:記憶體佔用偏大
優點:查詢速度快

相容多位元組和寬位元組字符集:

#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

小技巧:所有以前以str開頭的字串函式,在通用字元型別中str被替換為_tcs,在寬位元組字元中str被替換為wcs