Bienvenidos sean a este post, hoy veremos como crear una tabla ASCII con codigo.
Si bien no sera la tabla completa vamos a ver como representar una con los caracteres imprimibles, dado que por el momento no podremos representar a los que son de control pero esto es solo momentaneo, para esto vamos a aplicar todo lo aprendido hasta ahora, nuestro primer paso sera crear un nuevo archivo que llamaremos ascii.c y le agregaremos el siguiente codigo:
ascii.c
#include <stdio.h>
int main()
{
int c1, c2=32, c3=64, c4=96;
printf("|Car Dec Hex |Car Dec Hex |Car Dec Hex |\n");
printf("|--------------|--------------|--------------|\n");
for(c1=0; c1 < 32; c1++, c2++, c3++, c4++)
{
printf("|%c %3d %#x|", c2, c2, c2);
printf("%c %3d %#x|", c3, c3, c3);
printf("%c %3d %#x|", c4, c4, c4);
printf("\n");
}
return 0;
}
Este es un codigo simple, primero definiremos cuatro variables, las cuales seran para cada rango de los caracteres, como vimos en este post, despues imprimiremos el encabezado de cada dato que mostraremos, por ultimo usaremos un bucle for que pasara por todos los valores para la tabla ASCII, pero por el momento no utilizamos a c1 sino al resto, recuerden que c1 representa a los caracteres de control y no podemos representarlos, en el bloque mostraremos los tres valores posibles de las variables c2, c3 y c4, es decir del caracter, el valor decimal y el valor hexadecimal, con todo esto comentado compilemos y veamos su salida:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ascii
|Car Dec Hex |Car Dec Hex |Car Dec Hex |
|--------------|--------------|--------------|
| 32 0x20|@ 64 0x40|` 96 0x60|
|! 33 0x21|A 65 0x41|a 97 0x61|
|" 34 0x22|B 66 0x42|b 98 0x62|
|# 35 0x23|C 67 0x43|c 99 0x63|
|$ 36 0x24|D 68 0x44|d 100 0x64|
|% 37 0x25|E 69 0x45|e 101 0x65|
|& 38 0x26|F 70 0x46|f 102 0x66|
|' 39 0x27|G 71 0x47|g 103 0x67|
|( 40 0x28|H 72 0x48|h 104 0x68|
|) 41 0x29|I 73 0x49|i 105 0x69|
|* 42 0x2a|J 74 0x4a|j 106 0x6a|
|+ 43 0x2b|K 75 0x4b|k 107 0x6b|
|, 44 0x2c|L 76 0x4c|l 108 0x6c|
|- 45 0x2d|M 77 0x4d|m 109 0x6d|
|. 46 0x2e|N 78 0x4e|n 110 0x6e|
|/ 47 0x2f|O 79 0x4f|o 111 0x6f|
|0 48 0x30|P 80 0x50|p 112 0x70|
|1 49 0x31|Q 81 0x51|q 113 0x71|
|2 50 0x32|R 82 0x52|r 114 0x72|
|3 51 0x33|S 83 0x53|s 115 0x73|
|4 52 0x34|T 84 0x54|t 116 0x74|
|5 53 0x35|U 85 0x55|u 117 0x75|
|6 54 0x36|V 86 0x56|v 118 0x76|
|7 55 0x37|W 87 0x57|w 119 0x77|
|8 56 0x38|X 88 0x58|x 120 0x78|
|9 57 0x39|Y 89 0x59|y 121 0x79|
|: 58 0x3a|Z 90 0x5a|z 122 0x7a|
|; 59 0x3b|[ 91 0x5b|{ 123 0x7b|
|< 60 0x3c|\ 92 0x5c|| 124 0x7c|
|= 61 0x3d|] 93 0x5d|} 125 0x7d|
|> 62 0x3e|^ 94 0x5e|~ 126 0x7e|
|? 63 0x3f|_ 95 0x5f| 127 0x7f|
tinchicus@dbn001vrt:~/lenguajes/C$
Ahora vamos a modificarlo para que nos muestre la tabla completa, para ello cambiaremos el codigo de la siguiente manera:
#include <stdio.h>
int main()
{
int c1, c2=32, c3=64, c4=96;
printf("|Car Dec Hex |");
printf("Car Dec Hex |Car Dec Hex |Car Dec Hex |\n");
printf("|--------------");
printf("|--------------|--------------|--------------|\n");
for(c1=0; c1 < 32; c1++, c2++, c3++, c4++)
{
switch(c1)
{
case 0:
printf("|%s %3d %#4x", "NUL", c1, c1);
break;
case 1:
printf("|%s %3d %#4x", "SOH", c1, c1);
break;
case 2:
printf("|%s %3d %#4x", "STX", c1, c1);
break;
case 3:
printf("|%s %3d %#4x", "ETX", c1, c1);
break;
case 4:
printf("|%s %3d %#4x", "EOF", c1, c1);
break;
case 5:
printf("|%s %3d %#4x", "ENQ", c1, c1);
break;
case 6:
printf("|%s %3d %#4x", "ACK", c1, c1);
break;
case 7:
printf("|%s %3d %#4x", "BEL", c1, c1);
break;
case 8:
printf("|%s %3d %#4x", " BS", c1, c1);
break;
case 9:
printf("|%s %3d %#4x", " HT", c1, c1);
break;
case 10:
printf("|%s %3d %#4x", " LF", c1, c1);
break;
case 11:
printf("|%s %3d %#4x", " VT", c1, c1);
break;
case 12:
printf("|%s %3d %#4x", " FF", c1, c1);
break;
case 13:
printf("|%s %3d %#4x", " CR", c1, c1);
break;
case 14:
printf("|%s %3d %#4x", " SQ", c1, c1);
break;
case 15:
printf("|%s %3d %#4x", " SI", c1, c1);
break;
case 16:
printf("|%s %3d %#x", "DLE", c1, c1);
break;
case 17:
printf("|%s %3d %#4x", "DC1", c1, c1);
break;
case 18:
printf("|%s %3d %#4x", "DC2", c1, c1);
break;
case 19:
printf("|%s %3d %#4x", "DC3", c1, c1);
break;
case 20:
printf("|%s %3d %#4x", "DC4", c1, c1);
break;
case 21:
printf("|%s %3d %#4x", "NAK", c1, c1);
break;
case 22:
printf("|%s %3d %#4x", "SYN", c1, c1);
break;
case 23:
printf("|%s %3d %#4x", "ETB", c1, c1);
break;
case 24:
printf("|%s %3d %#4x", "CAN", c1, c1);
break;
case 25:
printf("|%s %3d %#4x", " EM", c1, c1);
break;
case 26:
printf("|%s %3d %#4x", "SUB", c1, c1);
break;
case 27:
printf("|%s %3d %#4x", "ESC", c1, c1);
break;
case 28:
printf("|%s %3d %#4x", " FS", c1, c1);
break;
case 29:
printf("|%s %3d %#4x", " GS", c1, c1);
break;
case 30:
printf("|%s %3d %#4x", " RS", c1, c1);
break;
case 31:
printf("|%s %3d %#4x", " US", c1, c1);
break;
}
printf("|%c %3d %#x", c2, c2, c2);
printf("|%c %3d %#x", c3, c3, c3);
if (c4 == 127)
{
printf("|%s %3d %#x|", "DEL", c4, c4);
} else {
printf("|%c %3d %#x|", c4, c4, c4);
}
printf("\n");
}
return 0;
}
Aqui parece que hicimos un monton de modificaciones pero no son tantas, la primera fue agregar una nueva columna de identificacion, despues otro bloque separador, por ultimo debemos usar un switch donde evaluaremos los posibles valores de la variable c1, el cual sera el rango de 0 a 31 y en ella usaremos un printf especifico para cada valor y en ellas indicaremos a que representa, observen que cambiamos el operador %c por %s para poder representar cadenas en lugar de caracteres, otra modificacion que tenemos es la cantidad de caracteres que representaran en la seccion hexadecimal, el resto seguira siendo lo mismo, por ultimo tenemos un condicional donde si la variable c4 tiene el valor 127 especificaremos un printf para indicar que es el de supresion (DEL) y en caso contrario mostrara el caracter correspondiente, con todo esto comentado compilemos y veamos su salida:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ascii
|Car Dec Hex |Car Dec Hex |Car Dec Hex |Car Dec Hex |
|--------------|--------------|--------------|--------------|
|NUL 0 0| 32 0x20|@ 64 0x40|` 96 0x60|
|SOH 1 0x1|! 33 0x21|A 65 0x41|a 97 0x61|
|STX 2 0x2|" 34 0x22|B 66 0x42|b 98 0x62|
|ETX 3 0x3|# 35 0x23|C 67 0x43|c 99 0x63|
|EOF 4 0x4|$ 36 0x24|D 68 0x44|d 100 0x64|
|ENQ 5 0x5|% 37 0x25|E 69 0x45|e 101 0x65|
|ACK 6 0x6|& 38 0x26|F 70 0x46|f 102 0x66|
|BEL 7 0x7|' 39 0x27|G 71 0x47|g 103 0x67|
| BS 8 0x8|( 40 0x28|H 72 0x48|h 104 0x68|
| HT 9 0x9|) 41 0x29|I 73 0x49|i 105 0x69|
| LF 10 0xa|* 42 0x2a|J 74 0x4a|j 106 0x6a|
| VT 11 0xb|+ 43 0x2b|K 75 0x4b|k 107 0x6b|
| FF 12 0xc|, 44 0x2c|L 76 0x4c|l 108 0x6c|
| CR 13 0xd|- 45 0x2d|M 77 0x4d|m 109 0x6d|
| SQ 14 0xe|. 46 0x2e|N 78 0x4e|n 110 0x6e|
| SI 15 0xf|/ 47 0x2f|O 79 0x4f|o 111 0x6f|
|DLE 16 0x10|0 48 0x30|P 80 0x50|p 112 0x70|
|DC1 17 0x11|1 49 0x31|Q 81 0x51|q 113 0x71|
|DC2 18 0x12|2 50 0x32|R 82 0x52|r 114 0x72|
|DC3 19 0x13|3 51 0x33|S 83 0x53|s 115 0x73|
|DC4 20 0x14|4 52 0x34|T 84 0x54|t 116 0x74|
|NAK 21 0x15|5 53 0x35|U 85 0x55|u 117 0x75|
|SYN 22 0x16|6 54 0x36|V 86 0x56|v 118 0x76|
|ETB 23 0x17|7 55 0x37|W 87 0x57|w 119 0x77|
|CAN 24 0x18|8 56 0x38|X 88 0x58|x 120 0x78|
| EM 25 0x19|9 57 0x39|Y 89 0x59|y 121 0x79|
|SUB 26 0x1a|: 58 0x3a|Z 90 0x5a|z 122 0x7a|
|ESC 27 0x1b|; 59 0x3b|[ 91 0x5b|{ 123 0x7b|
| FS 28 0x1c|< 60 0x3c|\ 92 0x5c|| 124 0x7c|
| GS 29 0x1d|= 61 0x3d|] 93 0x5d|} 125 0x7d|
| RS 30 0x1e|> 62 0x3e|^ 94 0x5e|~ 126 0x7e|
| US 31 0x1f|? 63 0x3f|_ 95 0x5f|DEL 127 0x7f|
tinchicus@dbn001vrt:~/lenguajes/C$
Ahora si oficialmente tenes toda la tabla ASCII basica para poder trabajar con nuestros codigos, si observan en la columna de caracteres de control tenemos algunos que podemos utilizarlos para interceptar teclas, les dejo un par de ejemplos:
- 10 o 13, se pueden usar para la tecla ENTER
- 27, para la tecla ESC
- 9, para la tecla de TAB
- 8, para la tecla BACKSPACE
Pero de esto trataremos de verlo un poco mas adelante, por el momento lo dejamos aqui y esto les puede servir como referencia para futuros codigos.
En resumen, hoy hemos generado nuestra propia tabla ASCII, hemos implementado mucho del conocimiento anterior desde conceptos del lenguaje hasta lo visto recientemente en caracteres, primero hemos visto como mostrar los caracteres imprimibles y por ultimo una forma basica de representacion a los caracteres de control, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
