Типы данных Windows для строк
Большинство строковых операций могут использовать ту же логику для Юникод и для кодовых страниц Windows. Единственное различие заключается в том, что основная единица операции — это 16-разрядный символ (также известный как широкий символ) для Юникода и 8-разрядный символ для кодовых страниц Windows. Файлы заголовков Windows предоставляют несколько определений типов, которые упрощают создание источников, которые можно скомпилировать для Юникода или для кодовых страниц Windows.
Windows поддерживает три набора символьных и строковых типов данных: набор определений универсального типа, которые могут компилироваться для кодовых страниц Юникода или Windows, а также два набора определений конкретных типов. Один набор определений конкретных типов предназначен для использования с Юникодом, а другой — для использования с кодовыми страницами Windows.
Приложение, использующее универсальные типы данных, можно скомпилировать для Юникода, просто определив "ЮНИКОД" до #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.
Связанные разделы
-
Юникод в API Windows