Tipos de datos de Windows para cadenas

La mayoría de las operaciones de cadena pueden usar la misma lógica para Unicode y para las páginas de códigos de Windows. La única diferencia es que la unidad básica de operación es un carácter de 16 bits (también conocido como carácter ancho) para Unicode y un carácter de 8 bits para las páginas de códigos de Windows. Los archivos de encabezado de Windows proporcionan varias definiciones de tipo que facilitan la creación de orígenes que se pueden compilar para Unicode o para páginas de códigos de Windows.

Windows admite tres conjuntos de tipos de datos de caracteres y cadenas: un conjunto de definiciones de tipo genérico que se pueden compilar para páginas de códigos Unicode o Windows, y dos conjuntos de definiciones de tipo específicas. Un conjunto de definiciones de tipo específicas es para su uso con Unicode y el otro es para su uso con páginas de códigos de Windows.

Una aplicación que usa tipos de datos genéricos se puede compilar para Unicode simplemente definiendo "UNICODE" antes de las instrucciones #include para los archivos de encabezado o durante la compilación. Las nuevas aplicaciones de Windows deben usar Unicode para evitar las incoherencias de páginas de códigos variadas y simplificar la localización. Deben escribirse con tipos de datos genéricos y deben definir "UNICODE" para compilar estos tipos en tipos Unicode. En los pocos lugares donde una aplicación debe trabajar con datos de caracteres de 8 bits, puede hacer uso explícito de los tipos para las páginas de códigos de Windows.

La capacidad de compilar los tipos genéricos en tipos para páginas de códigos de Windows existe principalmente para admitir aplicaciones heredadas. Para compilar para páginas de código de Windows, la aplicación simplemente omite la definición UNICODE.

En el ejemplo siguiente se muestra el método usado en los archivos de encabezado de Windows para definir los tres conjuntos de tipos de datos. Para obtener la implementación, consulte el archivo de encabezado 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;

La letra "T" de una definición de tipo, por ejemplo, TCHAR o LPTSTR, designa un tipo genérico que se puede compilar para las páginas de códigos de Windows o Unicode. La letra "W" de una definición de tipo, por ejemplo, WCHAR o LPWSTR, designa un tipo Unicode. Dado que las páginas de códigos de Windows tienen el formato anterior, tienen definiciones de tipo simples, como CHAR y LPSTR. Para obtener una descripción completa de los tipos de datos en Windows, consulte Tipos de datos de Windows.

Unicode en la API de Windows