¿Por qué no ves código binario cuando abres un archivo binario con editor de texto?


51

¿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.


8
¿Qué es lo que esperabas? ¿Cómo crees que esto debería ser archivado?
Nikodemus RIP

2
Me pregunto por qué más editores no ofrecen al binario como secuencias ASCII 1/0 sin procesar.
Xeoncross

77
@Xenocross: debido a que la secuencia 0/1 sin procesar es inútil, es demasiado difícil de manejar para la decodificación manual porque ocupan una gran cantidad de espacio en la pantalla; La pantalla hexadecimal es generalmente más superior para la decodificación manual. Y con algo de entrenamiento, puede traducir hexadecimal a binario y viceversa de manera rápida y fácil.
Lie Ryan

3
@Fiasco Labs: pedantería: un número hexadecimal con dos dígitos - 00 a FF, que se traduce en decimal 0 - 255 (8 bits que representan 2 ^ 8 = 256 estados posibles).
Piskvor

1
@Piskvor - Gracias por decirlo mejor que yo. deadbeef es un número hexadecimal con 8 dígitos, para el registro. ; ^)
Fiasco Labs

Respuestas:


83

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).


44
Ughh, el LF me ha mordido más veces de las que me gustaría recordar.
surfasb

32

Porque lo has abierto en un editor de texto , no en un editor binario .


22
Como has visto, envía un mensaje de texto.
Ignacio Vazquez-Abrams

1
Texto como una representación de números hexadecimales (0-f) dispuestos en pares (bytes). Si quieres binario, convierte el hexadecimal a binario en una cadena de ceros y unos sin sentido. El maleficio es más legible para los humanos y más fácil de entender.
Fiasco Labs

2
Tengo que decir eso: alguien debería dar el paso audaz de publicar un editor binario real, con unos y ceros (y luego tal vez paneles separados con translitteraciones hexadecimales / char / dec) con el único propósito de enseñar este tipo de cosas. Sé que no deberían, pero los medios de comunicación populares y los profesores de matemáticas que fingen conocer las computadoras, establecen todas las expectativas equivocadas para los niños ansiosos dispuestos a aprender.
ZJR

@ ZJR: No hay razón para que no lo hagan. Muchos editores hexadecimales le permiten ver el contenido del archivo en binario. Los programadores generalmente no lo encuentran tan útil como la vista hexadecimal, por lo que no se escucha tanto.
David Z

16

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.


3

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:

Black    Black    Black    Gray     White    White    White    Gray
0x000000 0x000000 0x000000 0x7F7F7F 0xFFFFFF 0xFFFFFF 0xFFFFFF 0c7F7F7F

(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í:

text editor:
10101010
01010101
10101010
01010101

Stored data (ASCII values for '1', '0' and 'new line'):
0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x0D 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x0D 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x0D  0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x31

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'.


0

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.


UltraEdit es lo suficientemente inteligente: cambia al modo de edición hexadecimal para dichos archivos.
Peter Mortensen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.