字符串的 Windows 数据类型

大多数字符串作可以将相同的逻辑用于 Unicode,以及 Windows 代码页。 唯一的区别是,基本作单元是 Unicode 的 16 位字符(也称为宽字符),对于 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;

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

在 Windows API Unicode