Por que você não vê código binário ao abrir um arquivo binário com o editor de texto?

50

Por que você não vê código binário ao abrir um arquivo binário com o editor de texto? Por exemplo, quando abro uma imagem com um editor de texto, vejo alguns caracteres estranhos e também alguns caracteres legíveis por humanos; mas a imagem deve ser codificada em binário.

    
por Templar 18.12.2011 / 17:33

5 respostas

83
Os dados

Binário e texto não são separados: são simplesmente dados . Depende da interpretação que os torna um ou outro. Se você abrir dados binários (como um arquivo de imagem) em um editor de texto, muito disso não fará sentido, porque não se encaixa na sua interpretação escolhida (como texto).

O que você chama de texto é um subconjunto do possível conteúdo do arquivo: Dados que em um dado conjunto de caracteres se traduz em caracteres legíveis.

Por exemplo, em ASCII , você pode ver que, de 128 valores "permitidos", apenas cerca de metade são letras e números, 30 são pontuação e o resto são caracteres de controle . O último grupo simplesmente não é muito usado em arquivos de texto, e eles não têm uma boa representação textual. Alguns deles são Tab e Newline , onde os editores de texto já precisam ser criativos para exibi-los.

Alguns editores de texto têm opções para exibir explicitamente o espaço em branco. Então, eles serão desenhados como caracteres, além do comportamento regular de formatação (que também é apenas a interpretação desses caracteres).

O Pure ASCII apenas interpreta 128 valores. Os bytes usados para armazenar essas informações têm 256 valores possíveis cada, então metade dos valores possíveis não são permitidos em ASCII. Essas são, e. usado em conjuntos de caracteres específicos da região, como o Latin 1, mas em ASCII, eles são indefinidos. Eles não têm representação útil em um visualizador de texto que só pode manipular ASCII.

Dados binários geralmente não são interpretados como texto. Então, nesses arquivos, todos os valores possíveis de byte são comumente encontrados. Tudo o mais seria um desperdício (e essa é uma razão pela qual você pode compactar o texto muito bem). Os formatos de arquivo de imagem são complicados e você normalmente não os visualiza como texto, portanto, eles não precisam ser legíveis.

Como não há uma interpretação de dados comum (conjunto de caracteres) que mapeie todos os valores possíveis para caracteres legíveis, e como isso não faria sentido de qualquer maneira (como não é texto legível), as partes principais são exibidas como rabiscos. / p>

Um editor hexadecimal escolhe uma representação diferente para os dados: exibe cada byte como dois dígitos hexadecimal . É apenas uma representação diferente e outra com um conjunto de caracteres facilmente legível: todos os 256 valores possíveis de byte podem ser representados como dois dígitos hexadecimais.

Como há um mapeamento fácil de dados binários para hexadecimais e vice-versa (4 dígitos binários de / para um dígito hexadecimal) e binário contém muito pouca informação por dígito, o hexadecimal é geralmente o modo preferido para humanos ler binários, a menos que há razões específicas para preferir uma representação diferente.

Alguns editores de texto podem ter um modo editor hexadecimal e alguma heurística que tentou determinar se um arquivo é texto ou binário e seleciona automaticamente um modo ou outro. Mas isso pode ser difícil de acertar e não é uma propriedade específica do arquivo que diz se é um tipo ou outro.

Alguns clientes FTP pedem que você especifique quais terminações de arquivo são usadas para dados de texto . Esses programas alterarão o conteúdo do arquivo para corresponder ao sistema operacional da máquina à qual você está conectado, pois o Windows usa uma sequência de caracteres de finalização de linha diferente ( CR/LF ) que Linux e Unix (incluindo Mac OS X; LF ).

    
por 18.12.2011 / 17:50
33

Como você o abriu em um editor texto , não um binário editor .

    
por 18.12.2011 / 17:37
17

Tudo tem a ver com contexto e interpretação. O que está no seu computador são padrões de alta e baixa voltagem, ou regiões magnetizadas de um disco, que só ganham significado quando decidimos como queremos interpretá-las.

Em circunstâncias diferentes, o padrão baixo-alto-baixo-baixo-baixo-baixo-alto-alto pode significar o número 65, uma letra maiúscula "A", uma cor azul-celeste, que um cliente pediu café, o data '6 de março' ou qualquer coisa, realmente.

Quando você abre seu arquivo de imagem em um programa gráfico, ele sabe interpretá-lo como uma imagem, sabe quais padrões indicam o formato da imagem, quais padrões indicam o tamanho da imagem e assim por diante.

Quando você abre o arquivo de imagem em um editor de texto, ele é tratado como texto. Este é um formato muito simples, muito mais próximo do que realmente está acontecendo no computador, mas ainda há alguma interpretação acontecendo. Especificamente, quase todos os padrões são interpretados como um caractere particular, alguns normais como A-Z, mas também alguns caracteres estranhos. Alguns padrões não aparecem como caracteres, mas são tratados como formatação básica: nova linha, guia.

(A situação é um pouco complicada por coisas como Unicode e codificações de texto, como UTF-8, mas não vou lidar com essas aqui por causa da simplicidade.)

Quando você tiver um arquivo binário aberto em um editor de texto, tome cuidado para não fazer alterações, porque praticamente qualquer alteração feita interromperá completamente a interpretação normal do conteúdo do arquivo, isto é, ele arruinará o arquivo e o tornará inutilizável. .

    
por 18.12.2011 / 20:57
3

Como exemplo simplificado, considere um arquivo de imagem aberto com um editor de texto.

A imagem é um padrão de xadrez simples, com os quadrados de 3 pixels de largura e uma borda cinza de 1 pixel entre cada quadrado.  - três pixels pretos, um pixel de borda cinza, três pixels brancos, um pixel de borda cinza, repita.

A primeira linha nessa imagem teria o seguinte valor quatro vezes:

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

(Em Hex, em vez de Binary - a string em Binary seria quatro vezes mais longa - 0x7F sendo substituída por 0b01111111)

Se você carregar essa sequência de dados em um editor de texto, receberá o seguinte texto:

[Nulo] [Nulo] [Nulo] [Nulo] [Nulo] [Nulo] [Nulo] [Nulo] [Nulo] [Del] [Del] [Del] [Branco] [Branco] [Branco] [Branco] ] [Vazio] [Vazio] [Vazio] [Vazio] [Vazio] [Del] [Del] [Del]

Isso ocorre porque 0x00 é o código ASCII para o valor Null e você precisa gravar 3 vezes para obter o valor de um pixel preto (em 24 bits de BMP) e você tem 3 pixels pretos. Então 0x7F é o código ASCII para Delete, e você precisa TER três vezes para obter um pixel cinza. 0xFF não é código ASCII valud para nada em particular - mesmo no conjunto ASCII estendido - e você precisa escrevê-lo 9 vezes para obter 3 pixels brancos. Finalizando, você recebe mais três Deletes para escrever um pixel cinza.

Uma maneira diferente de mostrá-lo, que pode ser mais proveitosamente explicativo, é o exemplo inverso - o que você precisa escrever em um arquivo para obter zeros e uns quando aberto em um editor de texto?

Os códigos ASCII para zero e um, é claro! Um zero em um editor de texto não é armazenado como um único bit com valor 0, ele é armazenado como 8 bits com valor 0b00110000 ou em hex 0x30

O código ASCII para '0' é 0x30, e o código ASCII para '1' é 0x31, então se você quiser armazenar um padrão de xadrez como zeros e uns, seu arquivo ficará assim:

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

Há muito mais do que isso - os arquivos têm inícios e paradas, metadados e todos os outros tipos de coisas, mas a lição takehome e a resposta à sua pergunta são:

A menos que os primeiros 8 bits do seu arquivo sejam 0b00110000, o seu editor de texto não irá escrever '0' porque esse é o código ASCII para o caractere '0'. A menos que os primeiros 8 bits do seu arquivo sejam 0b00110001, o seu editor de texto não irá escrever '1' porque esse é o código ASCII para o caractere '1'.

    
por 22.07.2013 / 14:30
0

O editor não é inteligente o suficiente para descobrir se algum texto faz sentido ou não, de modo que ele exibe qualquer arquivo como texto, a menos que seja dito especificamente para fazer o contrário, se tiver esse recurso. Como outros salientaram, alguns editores têm o recurso de exibir hexadecimal.

    
por 19.12.2011 / 01:44

Tags