Red de conocimiento informático - Problemas con los teléfonos móviles - Programación en formato VGA

Programación en formato VGA

¿Alguna vez ha encontrado una cadena de caracteres inexplicables usando el comando DIR después de iniciar el sistema desde el disco de inicio? Los amigos experimentados te lo dirán: esos son caracteres chinos. ¿Carácter chino? No puedes evitar preguntar: no conozco a ninguno de ellos. Pero en realidad son caracteres chinos. Si inicia UCDOS u otro sistema de caracteres chinos, verá que es un carácter chino familiar. ¿Por qué veo resultados diferentes para los mismos caracteres chinos antes y después? Jaja, de hecho, en términos de hardware informático, no existe ningún concepto de caracteres chinos o inglés. El único concepto que conoce esta cosa de hierro es el código interno.

Código de caracteres chinos

¿Qué significa asentir? Es "correcto" y "es", pero en algunos lugares significa lo contrario. Una acción tiene diferentes interpretaciones; una pregunta tiene diferentes respuestas; sin embargo, un símbolo tiene diferentes significados. La clave es cómo lo entiendes. Lo mismo ocurre en las computadoras. Todos los datos se almacenan con ceros y unos, y se pueden obtener diferentes resultados operando con diferentes datos. Para la operación de visualización en inglés, debido a que existen pocos tipos de letras en inglés, solo se necesitan 8 bits (un byte). Para el chino, hay más de 5000 de uso común, por lo que nuestros predecesores de DOS pensaron en una forma de usar los valores raramente utilizados de los bits altos 128 de la tabla ASCII como un grupo para representar caracteres chinos, que es el Código interno de caracteres chinos. Los 128 bits restantes de orden inferior están reservados para caracteres ingleses, que son códigos internos en inglés. Si no lo cree, puede usar el Bloc de notas para escribir un archivo C:

main()

{

Unsigned char *s, *e ="ABcd ", * c = " Hola

clr SCR();

printf("English char = ");

s = e;

while(*s!=0) /*La cadena C termina en 0 */

{

printf("%3d,", * s);

s++;

}

printf(" \ nChinease char = ");

s = c;

mientras( *s! =0)

{

printf("%3d,", *s);

s++;

}

getch();

}

Luego use TC input *. ​Están cada byte en caracteres chinos e ingleses.

Fuente de caracteres chinos

Después de obtener el código interno de caracteres chinos, ¿cómo se puede mostrar en la pantalla? Fuentes, pero su significado ha cambiado fundamentalmente del significado de los números. Utiliza información digital para registrar la forma de los caracteres ingleses o chinos, como la "a" inglesa en la fuente:

Y el. El carácter chino "tiene" "Así es como se registran las fuentes:

En los sistemas de hardware, la información de las fuentes en inglés generalmente se solidifica en la ROM, y los caracteres en inglés incluso se pueden ver en CMOS sin ingresar al sistema. En DOS, Información de fuentes chinas Generalmente se registra en el archivo de fuentes chinas HZK16

Archivo de biblioteca de caracteres chinos

Después de comprender el principio de mostrar letras y caracteres chinos según la información de fuentes, ¿cómo podemos? ¿Obtener la información de la fuente de los caracteres chinos? ¿Tengo que hacerlo yo mismo? No. Después de un arduo trabajo, los predecesores de DOS colocaron las fuentes preparadas en una biblioteca estándar para evitar los problemas de las generaciones futuras. fuentes El llamado 16 * 16 significa que cada carácter chino se muestra en un área vertical y horizontal de 16 puntos, pero más tarde aparecieron las fuentes HZK12, HZK24, HZK32, HZK48 y las fuentes en negrita, regulares y oficiales. Hay muchos tipos de bibliotecas de caracteres chinos, todas ellas ordenadas en secuencia. El primer byte es el código de área del carácter chino y el último byte es el número de caracteres chinos. Cada área registra 94 caracteres chinos. el número de etiqueta es la posición específica del carácter chino en el área. La fórmula de cálculo para la ubicación es: 94*(número de área-1)+número de etiqueta-1 porque la matriz comienza desde 0 y el código de área comienza. desde 1.

Esta es solo la posición del carácter chino en la biblioteca de caracteres chinos, entonces, ¿cómo obtener la posición del carácter chino en la biblioteca de caracteres chinos en bytes? Simplemente multiplique por el número de bytes ocupados por una fuente de caracteres chinos, es decir (94*(código de área-1)+número de etiqueta-1)*el número de bytes ocupados por una fuente de caracteres chinos, obtendrá resultados diferentes según el tamaño de los caracteres chinos en cada resultado de la biblioteca de caracteres chinos. Tomando como ejemplo la fuente de matriz de puntos 16*16, la fórmula de cálculo es: (94*(código de área-1)+(número de etiqueta-1))*32. La información de 32 bytes que comienza desde esta posición en la biblioteca de caracteres chinos registra la información de fuente de este carácter.

Archivo de biblioteca de caracteres chinos

Después de comprender los principios de composición de los caracteres chinos de matriz de puntos y la biblioteca de caracteres chinos, mostrar caracteres chinos se vuelve simple. Tomando como ejemplo la fuente de matriz de puntos de 16 * 16, el método común es: mover el puntero de trabajo del archivo a la fuente china requerida, leer el archivo de fuente china en una matriz de 2 * 16 y luego usar un bucle for para mostrarlo. por uno. Tomando como ejemplo "I" mostrado en modo VGAHI, los pasos son los siguientes:

#Include "graphics.h"

#Include "stdio.h"

Main ()

{

int i=VGA, j=VGAHI, k;

Charmat sin firmar [16] [2], chino [ 3]= " I ";

ARCHIVO * HZK

if((HZK=fopen("hzk16"," rb"))==NULL)

Salir ( 0);

iniciar gráfico(&i&j,"";

I = chinase[0]-0xa 0; j = chinase[1]-0xa 0 ;/* Obtener código de área y código de bits*/

fseek(HZK, (94 *(I-1)+(j-1))* 32l, SEEK _ SET);

fread (mat, 32, 1, HZK);

for(j = 0; j<16;j++)

for(I = 0;i<2;i++)

for(k = 0; k & lt8;k++)

if(mat[j][I]& amp; (0x80 & gt& gtK)) /*La prueba es una visualización de 1 bit*/

putpixel(i*8+k, j, blanco);

getch();

closegraph();

fclose(HZK). );

}

¿Cómo te va ahora? Siempre que domines el método correcto, mostrar caracteres chinos no es complicado.

Imprimir fuentes. y HZK12

Si tiene UCDOS HZK24S (fuente Song), HZK24K (cursiva) o HZK24H (fuente negrita), también puede utilizar caracteres chinos en diferentes fuentes. La serie HZK24 es una matriz de puntos de 24*24. fuente, cada una. La fuente ocupa 3 * 24 bytes. Si sigue el método de visualización de HZK16, verá... Jaja, esto se debe a que esta fuente es diferente de las fuentes de impresión chinas generales. Por conveniencia, las fuentes están dispuestas. Al usarlas, simplemente transponga la información de bits de la fuente para mostrarla. Por ejemplo, si define mat[24][3], debería generarlo así:

para. (I = 0;i<24;i++)

for(j = 0;j<24;j++)

if ((0x 80>>i% 8)&Mat[j][ i/8]) /*Transponer visualización*/

putpixel(j+x,y+i, color);

También hay una fuente HZK12, que es una fuente estándar tipo, pero si cuenta su fuente como 12*12, los caracteres chinos no se pueden mostrar normalmente en absoluto. Para facilitar su uso, el diseñador de fuentes completó el número de dígitos en cada línea como un múltiplo entero de 8, por lo que la longitud real en bits de la fuente es 16*12. Aunque hay 4 dígitos más en cada línea, estos 4 dígitos son todos 0 (no se muestran), lo que no afecta el efecto de visualización.