| 編碼 | 特點 | ||
|---|---|---|---|
| ANSI | 單字節,英文 1 字節,中文 2 字節(DBCS),系統默認代碼頁相關 | ||
| Unicode | 統一碼,每字符固定碼位 | ||
| UTF-8 | 可變長:ASCII 1B,歐洲 2B,中文 3B,罕用 4B | ||
| UTF-16 | 固定 2 字節(BMP),輔助平面 4 字節,Windows 內核原生 | ||
| UTF-32 | 固定 4 字節,直接碼位映射 |
| 類型 | 含義 | UNICODE=ON 時實際類型 | UNICODE=OFF 時實際類型 |
|---|---|---|---|
| TCHAR | 通用字符 | WCHAR | CHAR |
| PTSTR / LPTSTR | 通用字符指針 | WCHAR* | CHAR* |
| PCTSTR / LPCTSTR | 通用常字符指針 | const WCHAR* | const CHAR* |
| LPSTR | ANSI 字符指針 | CHAR* | CHAR* |
| LPWSTR | Unicode 字符指針 | WCHAR* | WCHAR* |
| LPCTSTR | 通用常指針(API 輸入參數主流) | const WCHAR* | const CHAR* |
LONG RegQueryValueEx(
HKEY hKey,
LPCTSTR lpValueName, // 輸入:鍵名,常指針防修改
LPDWORD lpReserved, // 保留,必須 NULL
LPDWORD lpType, // 輸出:類型
LPBYTE lpData, // 輸出:數據緩衝區
LPDWORD lpcbData // 輸入輸出:緩衝區大小/實際大小
);
關鍵點:
LPBYTE = unsigned char*,字節流緩衝區lpcbData 輸入緩衝區大小,輸出實際寫入大小lpcbData = sizeof(buf) - sizeof(TCHAR) 預留結束符空間TCHAR buf[1024] 接收,強轉 (LPBYTE)buf 避免 MultiByteToWideChar 轉換TCHAR/LPTSTR/LPCTSTRLPCTSTR,輸出用 LPTSTR/LPBYTE_T("text") 或 TEXT("text") 宏A/W 後綴),統一用無後綴宏版本掌握類型體系邏輯,Windows 字符串編程不再迷茫。