Perché non vedi il codice binario quando apri un file binario con l'editor di testo?


51

Perché non vedi il codice binario quando apri un file binario con l'editor di testo? Ad esempio, quando apro un'immagine con l'editor di testo, vedo alcuni caratteri strani e anche alcuni caratteri leggibili dall'uomo; ma l'immagine dovrebbe essere codificata in binario.


8
Cosa ti aspetti? Come pensi che dovrebbe essere archiviato?
Nikodemus RIP

2
Mi chiedo perché più editor non offrano al binario come sequenze ASCII 1/0 non elaborate.
Xeoncross,

7
@Xenocross: poiché la sequenza raw 0/1 è inutile, è troppo ingombrante per la decodifica manuale perché occupa una grande quantità di spazio sullo schermo; la visualizzazione esadecimale è generalmente più superiore per la decodifica manuale. E con un po 'di addestramento, puoi tradurre esadecimale in binario e viceversa rapidamente e facilmente.
Lie Ryan,

3
@Fiasco Labs: Pedantry: un numero esadecimale con due cifre - da 00 a FF, che si traduce in decimale 0 - 255 (8 bit che rappresentano 2 ^ 8 = 256 stati possibili).
Piskvor,

1
@Piskvor - Grazie per averlo messo meglio di me. deadbeef è un numero esadecimale con 8 cifre, per la cronaca. ; ^)
Fiasco Labs

Risposte:


83

I dati binari e di testo non sono separati: sono semplicemente dati . Dipende dall'interpretazione che li rende l'uno o l'altro. Se apri dati binari (come un file di immagine) in un editor di testo, molti di questi non avranno senso, perché non si adattano all'interpretazione scelta (come testo).

Quello che chiami testo è un sottoinsieme dei possibili contenuti del file: i dati che in un determinato set di caratteri si traducono in caratteri leggibili.

Ad esempio, in ASCII , puoi vedere che, di 128 valori "consentiti", solo circa la metà sono lettere e numeri, 30 sono punteggiatura e il resto sono caratteri di controllo . Quest'ultimo gruppo non è molto usato nei file di testo e non hanno una buona rappresentazione testuale. Alcuni di essi sono i caratteri Tab e Newline , in cui gli editor di testo devono già essere creativi nel visualizzarli.

Alcuni editor di testo hanno opzioni per visualizzare esplicitamente spazi bianchi. Quindi verranno effettivamente disegnati come personaggi, oltre al normale comportamento di formattazione (che è anche solo l' interpretazione di questi personaggi).

Pure ASCII interpreta solo 128 valori. I byte utilizzati per memorizzare queste informazioni hanno 256 possibili valori ciascuno, quindi metà dei possibili valori non sono consentiti in ASCII. Questi sono ad esempio utilizzati in set di caratteri specifici della regione, come il latino 1, ma in ASCII non sono definiti. Non hanno una rappresentazione utile in un visualizzatore di testo in grado di gestire solo ASCII.


I dati binari non vengono generalmente interpretati come testo. Quindi in questi file si trovano comunemente tutti i possibili valori di byte . Tutto il resto sarebbe sprecato (ed è per questo che puoi comprimere molto bene il testo). I formati di file immagine sono complicati e di solito non li visualizzi come testo, quindi non devono essere leggibili.

Poiché non esiste un'interpretazione comune dei dati (set di caratteri) che associ tutti i possibili valori a caratteri leggibili, e dato che comunque non avrebbe molto senso (poiché non è un testo leggibile), le parti principali vengono visualizzate in modo incomprensibile.


Un editor esadecimale sceglie una rappresentazione diversa per i dati: visualizza ogni byte come due cifre esadecimali . È solo una rappresentazione diversa e una con un set di caratteri facilmente leggibile dall'uomo: tutti i 256 valori di byte possibili possono essere rappresentati come due cifre esadecimali.

Dato che esiste una facile mappatura dei dati binari su esadecimale e viceversa (4 cifre binarie da / a una cifra esadecimale) e binario contiene pochissime informazioni per cifra, l'esadecimale è generalmente il modo preferito per gli umani di leggere i binari, a meno che non siano specifici motivi per preferire una rappresentazione diversa.


Alcuni editor di testo potrebbero avere una modalità di editor esadecimale e alcuni euristici che hanno cercato di determinare se un file è di testo o binario e selezionano automaticamente una modalità o l'altra. Ma questo può essere difficile da ottenere e non è una proprietà specifica del file che indica se si tratta di un tipo o dell'altro.


Alcuni client FTP richiedono di specificare quali terminazioni dei file vengono utilizzate per i dati di testo . Questi programmi cambieranno quindi il contenuto del file in modo che corrisponda al sistema operativo del computer a cui sei connesso, poiché Windows utilizza una sequenza di caratteri di fine riga diversa ( CR/LF) rispetto a Linux e Unix (incluso Mac OS X; LF).


4
Uffa, la LF mi ha morso più volte di quanto non mi ricordi.
surfasb,

32

Perché l'hai aperto in un editor di testo , non in un editor binario .


22
Come hai visto, testo.
Ignacio Vazquez-Abrams,

1
Testo come rappresentazione di numeri esadecimali (0-f) disposti in coppie (byte). Se vuoi binario, converti l'esagono in binario in una stringa insensata di zero e uno. Hex è più leggibile dall'uomo e più facile da capire.
Fiasco Labs,

2
Devo dire che: qualcuno dovrebbe fare il passo audace per pubblicare un editor binario reale, con Ones e Zeros , (e quindi magari separare i riquadri con relative traslitterazioni hex / char / dec) al solo scopo di insegnare questo tipo di cose. So che non dovrebbero, ma i media popolari e gli insegnanti di matematica che fingono di conoscere i computer hanno sbagliato tutte le aspettative per i bambini desiderosi di imparare.
ZJR

@ZJR: nessuna ragione per cui non dovrebbero. Molti editor esadecimali ti consentono di visualizzare il contenuto dei file in binario. I programmatori generalmente non lo trovano utile quanto la vista esadecimale, quindi non ne sentirete tanto.
David Z,

16

Ha tutto a che fare con il contesto e l'interpretazione. Cosa c'è nel tuo computer sono schemi di alta e bassa tensione, o regioni magnetizzate di un disco, che acquistano significato solo quando decidiamo come vogliamo interpretarli.

In circostanze diverse, il modello basso-alto-basso-basso-basso-basso-basso-alto potrebbe indicare il numero 65, una lettera maiuscola 'A', un colore blu cielo, che un cliente ha ordinato il caffè, la data 'marzo 6 'o qualsiasi altra cosa, davvero.

Quando apri il tuo file di immagine in un programma di grafica, sa interpretarlo come un'immagine, sa quali schemi indicano il formato dell'immagine, quali schemi indicano la dimensione dell'immagine e così via.

Quando apri il tuo file di immagine in un editor di testo, viene trattato come testo. Questo è un formato molto semplice, molto più vicino a ciò che sta realmente accadendo nel computer, ma c'è ancora qualche interpretazione in corso. In particolare, quasi ogni modello viene interpretato come un personaggio particolare, alcuni normali come AZ, ma anche alcuni personaggi strani. Alcuni pattern non vengono visualizzati come caratteri ma vengono invece trattati come formattazione di base: newline, tab.

(La situazione è leggermente complicata da cose come Unicode e codifiche di testo come UTF-8 ma non tratterò quelle qui per motivi di semplicità.)

Quando un file binario è aperto in un editor di testo, fare attenzione a non apportare modifiche, poiché quasi tutte le modifiche apportate interromperanno completamente la normale interpretazione del contenuto del file, ovvero rovinerà il file e lo renderà inutilizzabile.


3

Come esempio semplificato, considera un file di immagine aperto con un editor di testo.

L'immagine è un semplice motivo a scacchi, con i quadrati di 3 pixel di larghezza e un bordo grigio di 1 pixel tra ogni quadrato. - tre pixel neri, un pixel bordo grigio, tre pixel bianchi, un pixel bordo grigio, ripetere.

La prima riga in quell'immagine avrebbe il seguente valore quattro volte:

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

(In esadecimale, piuttosto che binario - la stringa in binario sarebbe quattro volte più lunga - 0x7F verrà sostituito con 0b01111111)

Se carichi quella stringa di dati in un editor di testo, otterrai il seguente testo:

[Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Del] [Del] [Del] [Vuoto] [Vuoto] [Vuoto] [Vuoto] [Vuoto ] [vuoto] [vuoto] [vuoto] [vuoto] [Del] [Del] [Del]

Questo perché 0x00 è il codice ASCII per il valore Null e devi scriverlo 3 volte per ottenere il valore per un pixel nero (comunque in BMP a 24 bit) e hai 3 pixel neri. Quindi 0x7F è il codice ASCII per Elimina e hai bisogno di QUEL tre volte per ottenere un pixel grigio. 0xFF non è un codice ASCII valido per nulla in particolare - anche nel set ASCII esteso - e devi scriverlo 9 volte per ottenere 3 pixel bianchi. Completandolo, ottieni altre tre eliminazioni per scrivere un pixel grigio.

Un modo diverso di mostrarlo, che potrebbe essere più utilmente esplicativo, è l'esempio inverso: cosa devi scrivere su un file per ottenere zero e quelli quando vengono aperti in un editor di testo?

I codici ASCII per zero e uno, ovviamente! Uno zero in un editor di testo non viene memorizzato come singolo bit con valore 0, viene archiviato come 8 bit con valore 0b00110000 o in esadecimale 0x30

Il codice ASCII per '0' è 0x30 e il codice ASCII per '1' è 0x31, quindi se si desidera memorizzare un modello di scacchi come zero e uno, il file sarà simile al seguente:

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

C'è molto più di questo: i file hanno inizio e fine, metadati e tutti gli altri tipi di cose, ma la lezione da portare a casa e la risposta alla tua domanda è:

A meno che i primi 8 bit del tuo file siano 0b00110000, il tuo editor di testo non scriverà '0' perché è il codice ASCII per il carattere '0'. A meno che i primi 8 bit del tuo file siano 0b00110001, il tuo editor di testo non scriverà '1' perché quello è il codice ASCII per il carattere '1'.


0

L'editor non è abbastanza intelligente da capire se un po 'di testo ha un senso o meno, quindi visualizza qualsiasi file come testo se non diversamente specificato, se ha quella caratteristica. Come altri hanno sottolineato, alcuni editor hanno la funzione di visualizzare hex.


UltraEdit è abbastanza intelligente: passa a modalità di modifica esadecimale per tali file.
Peter Mortensen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.