Carácter nulo
El carácter nulo (también terminador nulo) es un carácter de control con el valor cero. Está presente en muchos conjuntos de caracteres, incluidos los definidos por los códigos Baudot e ITA2, ISO/IEC 646 (o ASCII), el código de control C0, el conjunto de caracteres codificados universales (o Unicode) y EBCDIC. Está disponible en casi todos los principales lenguajes de programación. A menudo se abrevia como NUL (o NULL, aunque en algunos contextos ese término se usa para el puntero nulo). En códigos de 8 bits, se conoce como byte nulo.
El significado original de este carácter era como NOP: cuando se envía a una impresora o terminal, no tiene ningún efecto (sin embargo, algunas terminales lo muestran incorrectamente como un espacio). Cuando se usaban teleimpresoras electromecánicas como dispositivos de salida de computadora, se enviaban uno o más caracteres nulos al final de cada línea impresa para dar tiempo al mecanismo de regresar a la primera posición de impresión en la siguiente línea. En la cinta perforada, el carácter se representa sin agujeros, por lo que una nueva cinta sin perforar se llena inicialmente con caracteres nulos y, a menudo, se puede insertar texto en un espacio reservado de caracteres nulos al perforar los nuevos caracteres en la cinta sobre los nulos..
Hoy en día, el carácter tiene mucha más importancia en el lenguaje de programación C y sus derivados y en muchos formatos de datos, donde sirve como un carácter reservado que se utiliza para indicar el final de una cadena, a menudo llamada cadena terminada en nulo. Esto permite que la cadena tenga cualquier longitud con solo la sobrecarga de un byte; la alternativa de almacenar un conteo requiere un límite de longitud de cadena de 255 o una sobrecarga de más de un byte (existen otras ventajas/desventajas descritas en el artículo de cadenas terminadas en nulo).
Representación
En el código fuente, el carácter nulo a menudo se representa como la secuencia de escape en cadenas literales (por ejemplo,
"abcdef"
) o en constantes de caracteres (''
); este último también puede escribirse simplemente como 0
(sin comillas ni barra inclinada). En muchos lenguajes (como C, que introdujo esta notación), esta no es una secuencia de escape separada, sino una secuencia de escape octal con un solo dígito octal 0; en consecuencia, no debe ir seguido de ninguno de los dígitos
0
a 7
; de lo contrario, se interpreta como el comienzo de una secuencia de escape octal más larga. Otras secuencias de escape que se encuentran en uso en varios idiomas son 00
, x00
, z
o u0000. Se puede colocar un carácter nulo en una URL con el código de porcentaje
%00
.
La capacidad de representar un carácter nulo no siempre significa que la cadena resultante se interpretará correctamente, ya que muchos programas considerarán que el carácter nulo es el final de la cadena. Por lo tanto, la capacidad de escribirlo (en caso de que el usuario ingrese sin verificar) crea una vulnerabilidad conocida como inyección de bytes nulos y puede conducir a vulnerabilidades de seguridad.
En notación de intercalación, el carácter nulo es ^@
. En algunos teclados, se puede ingresar un carácter nulo manteniendo presionada Ctrl y presionando @ (en EE. UU. los diseños solo Ctrl+2 a menudo funcionarán, sin necesidad de ⇧ Shift para obtener el signo @).
La notación hexadecimal para nulo es 00
. La decodificación de la cadena Base64 AA==
también produce el carácter nulo.
En la documentación, el carácter nulo a veces se representa como un símbolo de un solo em de ancho que contiene las letras "NUL". En Unicode, hay un carácter para esto: U+2400 ␀ .
Codificación
En todos los juegos de caracteres modernos, el carácter nulo tiene un valor de punto de código de cero. En la mayoría de las codificaciones, esto se traduce a una sola unidad de código con valor cero. Por ejemplo, en UTF-8 es un solo byte cero. Sin embargo, en UTF-8 modificado, el carácter nulo se codifica como dos bytes: 0xC0, 0x80. Esto permite que el byte con el valor de cero, que ahora no se usa para ningún carácter, se use como un terminador de cadena.
Contenido relacionado
Deslizamiento de bits
Red de área amplia
Red de área local