win32中的寬字符
寬字符
| 數(shù)據(jù)類型 | 容器、模板 | |
|---|---|---|
| ASCII | 一個字符 | 一個字節(jié) |
| GB碼(擴(kuò)展了的ASCII) | 英文字符 | 一個字節(jié) |
| GB碼 | 中文字符 | 兩個字節(jié) |
| UNICODE字符集(unicode編碼實際指的是utf-16) | 常用字符 | 兩個字節(jié) |
寬字符: 用多個字節(jié)來表示的字符稱之為寬字符(只要不是以單字節(jié)存儲都可稱為寬字符)
注:寬字符不等同與UTF-16更不等同與UNICODE
wchar_t 寬字符類型
C/C++中對寬字符定義了一個類型 wchar_t 用來存儲兩字節(jié)寬度的寬字符
常用的字符串操作字符
strlen() wcslen()
strcmp() wcscmp()
strcat() wcscat()
strcpy() wcscpy()
wchar_t arr[] = L"Hello World";
printf("%d \r\n",wcslen(arr));
在同一個項目工程里務(wù)必只使用一種編碼規(guī)則,一面發(fā)生管理紊亂
Windows定義了一系列新的類型
| 原生 | win32 | |
|---|---|---|
| typedef | char | CHAR |
| typedef | short | SHORT |
| typedef | int | INT |
| typedef | long | LONG |
| typedef | unsigned long | DWORD |
| typedef | int | BOOL |
| typedef | unsigned char | BYTE |
| typedef | unsigned short | WORD |
| typedef | float | FLOAT |
不同項目間合作 單字符和寬字符的問題
常規(guī)解決方案(不推薦):
事先約定使用同一種編碼規(guī)范
-
在接口處通過某些函數(shù)完成兩種編碼的轉(zhuǎn)換
MultiByteToWideChar() WideCharToMultiByte()
微軟爸爸的解決方案:
TCHAR 類型
VC6中 :定義
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef unsigned char TCHAR;
使用
TCHAR arr[] = TEXT"Hello World";