Red de conocimiento informático - Aprendizaje de programación - ¿La clase CRecordSet de MFC admite la programación UNICODE?

¿La clase CRecordSet de MFC admite la programación UNICODE?

Soporte

Programación Unnicode en C

El soporte para caracteres anchos es en realidad parte del estándar ANSI C para soportar la representación multibyte de caracteres. Los caracteres anchos son diferentes de Unicode, que es solo una codificación de caracteres anchos.

1. Definición de caracteres anchos

En ANSI, la longitud de un carácter (char) es de un byte. Cuando se usa Unicode, un carácter ocupa una palabra. C define el tipo de carácter ancho más básico wchar_t en el archivo de encabezado wchar.h:

typedef unsigned short wchar_t;

Desde aquí podemos ver claramente que el llamado carácter ancho It es un entero corto sin signo.

2. Constantes de cadena ancha

Construir constantes de cadena es una tarea común para los programadores de C. Entonces, ¿cómo construir una constante de cadena ancha? Es muy simple, simplemente agrega una letra L mayúscula antes de la constante de cadena, por ejemplo:

wchar_t *str1=L" Hello"

Esta L es muy importante, solo si With; Al hacerlo, el compilador sabe que desea almacenar la cadena como un carácter y una palabra. Tenga en cuenta también que no puede haber un espacio entre L y la cadena.

3. Funciones de biblioteca de cadenas anchas

Para operar cadenas anchas, C define específicamente un conjunto de funciones. Por ejemplo, la función para encontrar la longitud de una cadena ancha es<. /p>

size_t __cdel wchlen (const wchar_t*);

¿Por qué necesitamos definir específicamente estas funciones? La causa principal es que las cadenas bajo ANSI se identifican con "\0" al final de la cadena (las cadenas Unicode terminan con "\0\0"), y el funcionamiento correcto de muchas funciones de cadena se basa en esto. Sabemos que en el caso de caracteres anchos, un carácter ocupa una palabra de espacio en la memoria, lo que impide que las funciones de cadena que operan con caracteres ANSI se ejecuten correctamente. Tome la cadena "Hola" como ejemplo. En caracteres anchos, sus cinco caracteres son:

0x0048 0x0065 0x006c 0x006c 0x006f

En la memoria, la disposición real es

<. p>48 00 65 00 6c 00 6c 00 6c 00 6f 00

Por lo tanto, cuando las funciones de cadena ANSI (como strlen) encuentran 00 después de los primeros 48, se considerarán el final de una cadena, el resultado ¡El uso de strlen para encontrar la longitud de una cuerda ancha siempre será 1!

4. Utilice macros para implementar la programación universal de ANSI y Unicode.

Consulte, C tiene un conjunto completo de tipos de datos y funciones que implementan la programación Unicode, lo que significa que puede hacerlo completamente. implementarlo usando programación C Unicode.

Supongamos que necesitamos dos versiones del programa: una versión ANSI y una versión Unicode. Por supuesto, es completamente factible escribir dos conjuntos de código para implementar la versión ANSI y la versión Unicode. Sin embargo, mantener dos conjuntos de códigos para caracteres ANSI y Unicode es algo muy problemático. Para reducir la carga de programación, C define una serie de macros para ayudarlo a implementar la programación universal en ANSI y Unicode.

La esencia de las macros C para la programación general ANSI y Unicode es que estas macros se expanden a caracteres ANSI o Unicode (cadenas), dependiendo de si "_UNICODE" está definido (tenga en cuenta el guión bajo).

El siguiente es un extracto de un código en el archivo de encabezado tchar.h:

#ifdef _UNICODE

typedef wchar_t TCHAR;

#definir __T(x) L##x

#definir _T(x) __T(x)

#definir _T(x) __T(x)

# define _T(x) __T(x)

#else

#define __T(x) x

typedef char TCHAR;

#endif