¿Por qué no ves código binario cuando abres un archivo binario con editor de texto? Por ejemplo, cuando abro una imagen con editor de texto, veo algunos caracteres extraños y también algunos caracteres legibles por humanos; pero la imagen debe estar codificada en binario.
51
Respuestas:
Los datos binarios y de texto no están separados: son simplemente datos . Depende de la interpretación que los haga uno u otro. Si abre datos binarios (como un archivo de imagen) en un editor de texto, gran parte no tendrá sentido, ya que no se ajusta a la interpretación elegida (como texto).
Lo que llama texto es un subconjunto de los posibles contenidos del archivo: datos que en un conjunto de caracteres dado se traducen en caracteres legibles.
Por ejemplo, en ASCII , puede ver que, de 128 valores "permitidos", solo aproximadamente la mitad son letras y números, 30 son signos de puntuación y el resto son caracteres de control . El último grupo simplemente no se usa mucho en archivos de texto, y no tienen una representación textual realmente buena. Algunos de ellos son caracteres Tab y Newline , donde los editores de texto ya necesitan ser creativos para mostrarlos.
Algunos editores de texto tienen opciones para mostrar explícitamente espacios en blanco. Luego se dibujarán como caracteres, además de su comportamiento de formateo habitual (que también es solo la interpretación de estos caracteres).
ASCII puro solo interpreta 128 valores. Los bytes utilizados para almacenar esta información tienen 256 valores posibles cada uno, por lo que la mitad de los valores posibles no están permitidos en ASCII. Esos se usan, por ejemplo, en conjuntos de caracteres específicos de la región, como Latin 1, pero en ASCII, no están definidos. No tienen una representación útil en un visor de texto que solo pueda manejar ASCII.
Los datos binarios generalmente no se interpretan como texto. Entonces, en estos archivos, todos los valores de bytes posibles se encuentran comúnmente. Todo lo demás sería un desperdicio (y esa es una razón por la que puedes comprimir texto muy bien). Los formatos de archivo de imagen son complicados y, por lo general, no los ve como texto, por lo que no es necesario que sean legibles.
Como no existe una interpretación de datos común (juego de caracteres) que asigne todos los valores posibles a caracteres legibles, y dado que eso no tendría mucho sentido de todos modos (ya que no es texto legible), las partes principales se muestran como galimatías.
Un editor hexadecimal elige una representación diferente para los datos: muestra cada byte como dos dígitos hexadecimales . Es solo una representación diferente, y una con un conjunto de caracteres fácilmente legible para los humanos: los 256 valores de bytes posibles se pueden representar como dos dígitos hexadecimales.
Dado que hay un mapeo fácil de datos binarios a hexadecimal y viceversa (4 dígitos binarios a / de un dígito hexadecimal), y el binario contiene muy poca información por dígito, el hexadecimal es generalmente la forma preferida para que los humanos lean el binario, a menos que existan razones para preferir una representación diferente.
Algunos editores de texto podrían tener un modo de editor hexadecimal y algunos heurísticos que intentaron determinar si un archivo es de texto o binario, y seleccionar automáticamente un modo u otro. Pero esto puede ser difícil de corregir y no es una propiedad específica del archivo que dice si es de un tipo u otro.
Algunos clientes FTP le piden que especifique qué terminaciones de archivo se usan para datos de texto . Estos programas luego cambiarán el contenido del archivo para que coincida con el sistema operativo de la máquina a la que está conectado, ya que Windows usa una secuencia de caracteres de final de línea (
CR/LF
) diferente a Linux y Unix (incluido Mac OS X;LF
).fuente
Porque lo has abierto en un editor de texto , no en un editor binario .
fuente
Todo tiene que ver con el contexto y la interpretación. Lo que hay en su computadora son patrones de alto y bajo voltaje, o regiones magnetizadas de un disco, que solo adquieren significado cuando decidimos cómo queremos interpretarlos.
En diferentes circunstancias, el patrón bajo-alto-bajo-bajo-bajo-bajo-bajo-alto podría significar el número 65, una letra mayúscula 'A', un color azul celeste, que un cliente pidió café, la fecha 'marzo 6 ° o cualquier cosa, de verdad.
Cuando abre su archivo de imagen en un programa de gráficos, sabe interpretarlo como una imagen, sabe qué patrones indican el formato de la imagen, qué patrones indican el tamaño de la imagen, etc.
Cuando abre su archivo de imagen en un editor de texto, se trata como texto. Este es un formato muy simple, mucho más cercano a lo que realmente está sucediendo en la computadora, pero todavía hay algo de interpretación. Específicamente, casi todos los patrones se interpretan como un personaje en particular, algunos normales como AZ, pero también algunos personajes extraños. Algunos patrones no aparecen como caracteres, sino que se tratan como formato básico: nueva línea, pestaña.
(La situación es un poco complicada por cosas como Unicode y codificaciones de texto como UTF-8, pero no trataré con eso aquí por simplicidad).
Cuando tenga un archivo binario abierto en un editor de texto, tenga cuidado de no realizar cambios, ya que casi cualquier cambio que realice interrumpirá por completo la interpretación normal del contenido del archivo, es decir, lo arruinará y lo dejará inutilizable.
fuente
Como ejemplo simplificado, considere un archivo de imagen abierto con un editor de texto.
La imagen es un patrón de ajedrez simple, con los cuadrados de 3 píxeles de ancho y un borde gris de 1 píxel entre cada cuadrado. - tres píxeles negros, un píxel de borde gris, tres píxeles blancos, un píxel de borde gris, repita.
La primera línea en esa imagen tendría el siguiente valor cuatro veces:
(En hexadecimal, en lugar de binario, la cadena en binario sería cuatro veces más larga, reemplazando 0x7F por 0b01111111)
Si carga esa cadena de datos en un editor de texto, obtendrá el siguiente texto:
[Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Del] [Del] [Del] [en blanco] [en blanco] [en blanco] [en blanco] [en blanco ] [En blanco] [En blanco] [En blanco] [En blanco] [Del] [Del] [Del]
Esto se debe a que 0x00 es el código ASCII para el valor nulo y debe escribirlo 3 veces para obtener el valor de un píxel negro (de todos modos, en 24 bits BMP) y tiene 3 píxeles negros. Entonces 0x7F es el código ASCII para Eliminar, y necesita ESO tres veces para obtener un píxel gris. 0xFF no es un código ASCII valud para nada en particular, incluso en el conjunto ASCII extendido, y debe escribirlo 9 veces para obtener 3 píxeles blancos. Para finalizar, obtienes tres eliminaciones más para escribir un píxel gris.
Una forma diferente de mostrarlo, que podría ser más útilmente explicativa, es el ejemplo inverso: ¿qué tiene que escribir en un archivo para obtener ceros y unos cuando se abre en un editor de texto?
¡Los códigos ASCII para cero y uno, por supuesto! Un cero en un editor de texto no se almacena como un solo bit con valor 0, se almacena como 8 bits con valor 0b00110000 o en hexadecimal 0x30
El código ASCII para '0' es 0x30, y el código ASCII para '1' es 0x31, por lo que si desea almacenar un patrón de ajedrez como ceros y unos, su archivo se verá así:
Hay mucho más que esto: los archivos tienen inicios y paradas, metadatos y todo tipo de cosas, pero la lección y la respuesta a su pregunta es:
A menos que los primeros 8 bits de su archivo sean 0b00110000, su editor de texto no escribirá '0' porque ese es el código ASCII para el carácter '0'. A menos que los primeros 8 bits de su archivo sean 0b00110001, su editor de texto no escribirá '1' porque ese es el código ASCII para el carácter '1'.
fuente
El editor no es lo suficientemente inteligente como para determinar si algún texto tiene sentido o no, por lo que muestra cualquier archivo como texto a menos que se le indique específicamente que haga lo contrario, si tiene esa característica. Como otros señalaron, algunos editores tienen la función de mostrar hexadecimal.
fuente