Windows 字符串数据类型

大多数字符串操作可以对 UnicodeWindows 代码页使用相同的逻辑。 唯一的区别是,基本操作单位是一个 16 位字符 (也称为 Unicode 的宽字符) ,以及 Windows 代码页的 8 位字符。 Windows 头文件提供了多个类型定义,以便轻松创建可为 Unicode 或 Windows 代码页编译的源。

Windows 支持三组字符和字符串数据类型:一组可为 Unicode 或 Windows 代码页编译的泛型类型定义,以及两组特定类型定义。 一组特定类型定义用于 Unicode,另一组用于 Windows 代码页。

只需在头文件的 #include 语句之前或编译期间定义“UNICODE”,即可为 Unicode 编译使用泛型数据类型的应用程序。 新的 Windows 应用程序应使用 Unicode 来避免不同代码页的不一致并简化本地化。 它们应使用泛型数据类型编写,并且应定义“UNICODE”,以便将这些类型编译为 Unicode 类型。 在应用程序必须处理 8 位字符数据的少数位置,它可以显式使用 Windows 代码页的类型。

将泛型类型编译为 Windows 代码页的类型的功能主要是为了支持旧版应用程序。 若要编译 Windows 代码页,应用程序只需省略 UNICODE 定义。

以下示例演示 Windows 头文件中用于定义三组数据类型的方法。 有关 实现,请参阅 Winnt.h 头文件。

// Generic types

#ifdef UNICODE
    typedef wchar_t TCHAR;
#else
    typedef unsigned char TCHAR;
#endif

typedef TCHAR *LPTSTR, *LPTCH;

// 8-bit character specific

typedef unsigned char CHAR;
typedef CHAR *LPSTR, *LPCH;

// Unicode specific (wide characters)

typedef unsigned wchar_t WCHAR;
typedef WCHAR *LPWSTR, *LPWCH;

类型定义中的字母“T”(例如 TCHAR 或 LPTSTR)指定可为 Windows 代码页或 Unicode 编译的泛型类型。 类型定义中的字母“W”(例如 WCHAR 或 LPWSTR)指定 Unicode 类型。 由于 Windows 代码页的格式较旧,因此它们具有简单的类型定义,例如 CHAR 和 LPSTR。 有关 Windows 中数据类型的完整说明,请参阅 Windows 数据类型

Windows API 中的 Unicode