La estructura de ASCII
ASCII (1963, revisado en 1967) es un código de 7 bits: 128 valores, de los cuales 33 son caracteres de control y 95 imprimibles. Su disposición se diseñó para teleimpresores mecánicos y hardware que manipulaba bits, y el diseño aún se nota:
- La caja es un bit.
Aes 0x41,aes 0x61: difieren solo en el bit 5 (valor 32).c | 0x20pasa una letra a minúscula,c & ~0x20a mayúscula yc ^ 0x20alterna. - Los dígitos son su valor más 48.
'7' - '0'es 7, y el nibble bajo del código de un dígito es el propio dígito (0x37 → 7). - Ctrl borra dos bits. Ctrl-C envía 0x03 porque C es 0x43 y el terminal borra los bits 6 y 5 (
c & 0x1F). Por eso Ctrl-D es EOT (4), Ctrl-H es retroceso (8), Ctrl-I es tabulador (9), Ctrl-M es retorno de carro (13), Ctrl-[ es Escape (27) y Ctrl-@ es NUL. - DEL es 127, los siete bits a uno, porque perforar todos los agujeros en una cinta de papel era como se borraba un carácter.
Más allá de 127
No existe el «ASCII extendido». Los bytes 128–255 significaban caracteres distintos en cada página de códigos (Latin-1, Windows-1252, CP437, KOI8-R, ISO-8859-2 para Europa central), que es el origen de los caracteres corruptos como «Ã©» por «é». Unicode los sustituyó a todos; UTF-8 mantiene los bytes 0–127 idénticos a ASCII y usa de 2 a 4 bytes por encima. El inspector Unicode muestra esos bytes.
Finales de línea
Unix termina las líneas con LF (10); Windows con CR LF (13 10); el Mac OS clásico usaba CR solo. Los teleimpresores necesitaban ambos: retorno de carro para devolver el cabezal y avance de línea para mover el papel. \r\n en la línea shebang de un script de shell sigue siendo la causa más común de los errores «bad interpreter».
Preguntas
¿Cuál es el código ASCII de la A?
65 en decimal, 0x41 en hex, 0101 en octal, 01000001 en binario. La a minúscula es 97 (0x61).
¿Qué son ASCII 10 y 13?
10 es LF (avance de línea, \n) y 13 es CR (retorno de carro, \r). Unix usa LF solo; Windows usa CR LF.
¿Por qué Ctrl-C envía 3?
Los terminales borran los dos bits altos del código de la letra: C es 0x43 = 0100 0011, y 0x43 & 0x1F = 3 (ETX, fin de texto). La shell asigna ETX a SIGINT.
¿0xFF o 255 es ASCII?
No. ASCII termina en 127. 128–255 dependen de la página de códigos, y en UTF-8 esos valores de byte solo aparecen como partes de caracteres multibyte.