首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Windows 字符串類型全景解析:ANSI/Unicode/UTF/TCHAR/LPSTR/LPCTSTR 體系完全指南

     編輯:關於C語言

編碼基礎

Windows 類型體系演進

// 基礎類型
typedef char CHAR;           // ANSI 單字節
typedef wchar_t WCHAR;       // Unicode 寬字符 (2B)

// 通用類型(視編譯選項切換)
#ifdef UNICODE
    typedef WCHAR TCHAR;
    typedef WCHAR *PTSTR, *LPTSTR;
    typedef const WCHAR *PCTSTR, *LPCTSTR;
#else
    typedef CHAR TCHAR;
    typedef CHAR *PTSTR, *LPTSTR;
    typedef const CHAR *PCTSTR, *LPCTSTR;
#endif

// 指針別名歷史包袱
typedef CHAR *PSTR, *LPSTR;      // P=Pointer, L=Long(遠指針歷史遺留),32位下等同
typedef WCHAR *PWSTR, *LPWSTR;
typedef const CHAR *PCSTR, *LPCSTR;
typedef const WCHAR *PCWSTR, *LPCWSTR;

核心類型速查表

編碼特點
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通用字符WCHARCHAR
PTSTR / LPTSTR通用字符指針WCHAR*CHAR*
PCTSTR / LPCTSTR通用常字符指針const WCHAR*const CHAR*
LPSTRANSI 字符指針CHAR*CHAR*
LPWSTRUnicode 字符指針WCHAR*WCHAR*
LPCTSTR通用常指針(API 輸入參數主流)const WCHAR*const CHAR*

實戰:RegQueryValueEx 參數解析

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 轉換

最佳實踐原則

  1. 新項目強制 UNICODE(VS 默認),統一用 TCHAR/LPTSTR/LPCTSTR
  2. API 輸入用 LPCTSTR,輸出用 LPTSTR/LPBYTE
  3. 字符串字面量用 _T("text") 或 TEXT("text") 宏
  4. 避免混用 ANSI/Unicode API(A/W 後綴),統一用無後綴宏版本

掌握類型體系邏輯,Windows 字符串編程不再迷茫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved