Por que você não vê código binário quando abre um arquivo binário com o editor de texto? Por exemplo, quando abro uma imagem com o editor de texto, vejo caracteres estranhos e também caracteres legíveis por humanos; mas a imagem deve ser codificada em binário.
51
Respostas:
Dados binários e de 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, muitos deles não farão sentido, porque não se encaixam na interpretação escolhida (como texto).
O que você chama de texto é um subconjunto do conteúdo possível do arquivo: dados que em um determinado conjunto de caracteres são convertidos em caracteres legíveis.
Por exemplo, em ASCII , você pode ver que, dos 128 valores "permitidos", apenas cerca da metade são letras e números, 30 são pontuação e o restante são caracteres de controle . O último grupo simplesmente não é muito usado em arquivos de texto e não possui uma representação textual realmente boa. Alguns deles são caracteres de tabulação e nova linha , onde os editores de texto já precisam ser criativos para exibi-los.
Alguns editores de texto têm opções para exibir explicitamente espaços em branco. Em seguida, eles serão desenhados como caracteres, além de seu comportamento de formatação regular (que também é apenas a interpretação desses caracteres).
O ASCII puro interpreta apenas 128 valores. Os bytes usados para armazenar essas informações têm 256 valores possíveis cada, portanto metade dos valores possíveis não são permitidos no ASCII. Esses são, por exemplo, usados em conjuntos de caracteres específicos da região, como o Latim 1, mas no ASCII, eles são indefinidos. Eles não têm representação útil em um visualizador de texto que possa lidar apenas com ASCII.
Dados binários geralmente não são interpretados como texto. Portanto, nesses arquivos, todos os valores possíveis de bytes são comumente encontrados. Todo o resto seria um desperdício (e é por isso que você pode compactar muito bem o texto). Os formatos de arquivo de imagem são complicados, e você geralmente não os vê como texto, portanto, eles não precisam ser legíveis.
Como não há interpretação de dados comum (conjunto de caracteres) que mapeia todos os valores possíveis para caracteres legíveis, e como isso não faria muito sentido de qualquer maneira (como não é um texto legível), as partes principais são exibidas como sem sentido.
Um editor hexadecimal escolhe uma representação diferente para os dados: exibe cada byte como dois dígitos hexadecimais . É apenas uma representação diferente e uma com um conjunto de caracteres facilmente legível por humanos: todos os 256 valores de bytes possíveis podem ser representados como dois dígitos hexadecimais.
Como existe um mapeamento fácil de dados binários para hexadecimal e vice-versa (4 dígitos binários de / para um dígito hexadecimal), e o binário contém muito pouca informação por dígito, hexadecimal é geralmente a maneira preferida para humanos lerem binário, a menos que haja razões para preferir uma representação diferente.
Alguns editores de texto podem ter um modo de editor hexadecimal e alguma heurística que tentaram determinar se um arquivo é texto ou binário e selecionam automaticamente um modo ou outro. Mas isso pode ser difícil de corrigir e não é uma propriedade específica do arquivo que diz se é de um tipo ou de outro.
Alguns clientes de FTP solicitam que você especifique quais terminações de arquivos são usadas para dados de texto . Esses programas alteram 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 final de linha diferente (
CR/LF
) do que Linux e Unix (incluindo Mac OS X;LF
).fonte
Porque você o abriu em um editor de texto , não em um editor binário .
fonte
Tudo tem a ver com contexto e interpretação. O que há no seu computador são padrões de alta e baixa tensão, ou regiões magnetizadas de um disco, que só ganham significado quando decidimos como queremos interpretá-los.
Sob diferentes circunstâncias, o padrão baixo-alto-baixo-baixo-baixo-baixo-baixo-alto pode significar o número 65, uma letra maiúscula 'A', uma cor azul-celeste, que um cliente pediu café, a data 'março 6 '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 seu 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 em andamento. Especificamente, quase todos os padrões são interpretados como um personagem em particular, alguns normais como AZ, 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 tratarei delas aqui por uma questão de simplicidade.)
Quando você tem um arquivo binário aberto em um editor de texto, tome cuidado para não fazer alterações, pois quase todas as alterações feitas atrapalham completamente a interpretação normal do conteúdo do arquivo, ou seja, arruinam o arquivo e o tornam inutilizável.
fonte
Como um exemplo simplificado, considere um arquivo de imagem aberto com um editor de texto.
A imagem é um padrão de xadrez simples, com 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 de branco, um pixel de borda cinza, repita.
A primeira linha nessa imagem teria o seguinte valor quatro vezes:
(Em Hex, em vez de Binário - a string em Binário seria quatro vezes maior - 0x7F sendo substituído por 0b01111111)
Se você carregar essa sequência de dados em um editor de texto, obterá o seguinte texto:
[Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Del] [Del] [Del] [Em branco] [Em branco] [Em branco] [Em branco] [Em branco] [Em branco ] [Em branco] [Em branco] [Em branco] [Em branco] [Del] [Del] [Del]
Isso ocorre porque 0x00 é o código ASCII para o valor Nulo e você precisa escrever isso três vezes para obter o valor de um pixel preto (em 24 BMP de qualquer maneira) e você tem três pixels pretos. Então 0x7F é o código ASCII para Excluir e você precisará disso três vezes para obter um pixel cinza. 0xFF não é um código ASCII valioso para nada em particular - mesmo no conjunto ASCII estendido - e você precisa escrevê-lo 9 vezes para obter 3 pixels brancos. Terminando, você recebe mais três exclusões para escrever um pixel cinza.
Uma maneira diferente de mostrá-lo, que pode ser mais útil, é o exemplo inverso - o que você precisa gravar em um arquivo para obter zeros e zeros quando aberto em um editor de texto?
O ASCII codifica zero e um, é claro! Um zero em um editor de texto não é armazenado como um único bit com o valor 0, é armazenado como 8 bits com o valor 0b00110000 ou em hexadecimal 0x30
O código ASCII para '0' é 0x30 e o código ASCII para '1' é 0x31; portanto, se você deseja armazenar um padrão de xadrez como zeros e zeros, seu arquivo será parecido com este:
Há muito mais do que isso - os arquivos têm início, parada e metadados e todos os outros tipos de coisas, mas a lição de casa e a resposta para sua pergunta são:
A menos que os primeiros 8 bits do seu arquivo sejam 0b00110000, seu editor de texto não gravará '0' porque esse é o código ASCII para o caractere '0'. A menos que os primeiros 8 bits do seu arquivo sejam 0b00110001, seu editor de texto não escreverá '1' porque esse é o código ASCII para o caractere '1'.
fonte
O editor não é inteligente o suficiente para descobrir se algum texto faz sentido ou não; portanto, ele exibe qualquer arquivo como texto, a menos que seja especificamente solicitado a fazer o contrário, se tiver esse recurso. Como outros apontaram, alguns editores têm o recurso de exibir hexadecimal.
fonte