Поделиться через


Типы данных Windows для работы со строками

Большинство строковых операций могут использовать ту же логику для Юникода и для кодовых страниц Windows. Единственное отличие заключается в том, что основной единицей операции является 16-разрядный символ (также известный как расширенный символ) для Юникода и 8-разрядный символ для кодовых страниц Windows. Файлы заголовков Windows предоставляют несколько определений типов, которые упрощают создание источников, которые можно скомпилировать для Юникода или для кодовых страниц Windows.

Windows поддерживает три набора символьных и строковых типов данных: набор определений универсальных типов, которые можно компилировать для кодовых страниц Юникода или Windows, и два набора определений конкретных типов. Один набор определений конкретных типов предназначен для использования с Юникодом, а другой — для использования с кодовыми страницами Windows.

Приложение, использующее универсальные типы данных, можно скомпилировать для Юникода, просто определив "UNICODE" перед инструкциями #include для файлов заголовков или во время компиляции. Новые приложения Windows должны использовать Юникод, чтобы избежать несоответствий различных кодовых страниц и упростить локализацию. Они должны быть написаны с универсальными типами данных и должны определять "ЮНИКОД", чтобы компилировать эти типы в типы Юникода. В некоторых местах, где приложение должно работать с 8-разрядными символьными данными, оно может явно использовать типы для кодовых страниц Windows.

Возможность компилировать универсальные типы в типы для кодовых страниц Windows существует в основном для поддержки устаревших приложений. Чтобы выполнить компиляцию для кодовой страницы Windows, приложение просто пропускает определение ЮНИКОДА.

В следующем примере показан метод, используемый в файлах заголовков 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 или Юникода. Буква "W" в определении типа, например WCHAR или LPWSTR, обозначает тип Юникода. Так как кодовые страницы Windows имеют более старую форму, они имеют простые определения типов, такие как CHAR и LPSTR. Полное описание типов данных в Windows см. в разделе Типы данных Windows.

Юникод в Windows API