web-dev-qa-db-fra.com

Pourquoi ne voyez-vous pas de code binaire lorsque vous ouvrez un fichier binaire avec éditeur de texte?

Pourquoi ne voyez-vous pas de code binaire lorsque vous ouvrez un fichier binaire avec éditeur de texte? Par exemple, lorsque j'ouvre une image avec éditeur de texte, je vois des personnages étranges et des personnages lisibles humains; Mais l'image doit être codée en binaire.

52
Templar

binaire et texte Les données ne sont pas séparées: elles sont simplement données. Cela dépend de l'interprétation qui en fait un ou l'autre. Si vous ouvrez des données binaires (telles qu'un fichier image) dans un éditeur de texte, une grande partie de celle-ci n'aura pas de sens, car elle ne correspond pas à votre interprétation (en tant que texte).

Ce que vous appelez Texte est un sous-ensemble du contenu du fichier possible: les données présentes dans une donnée donnée jeu de caractères se traduit par des caractères lisibles.

Par exemple, dans ASCII , vous pouvez voir que, sur des valeurs de 128 "autorisées", seulement environ la moitié sont des lettres et des chiffres, 30 ponctuations et le reste sont Caractères de contrôle. Ce dernier groupe n'est tout simplement pas utilisé dans des fichiers texte, et ils n'ont pas vraiment une bonne représentation textuelle. Certains d'entre eux sont onglet et Newline caractères, où les éditeurs de texte doivent déjà être créatifs dans les affichages.

Certains éditeurs de texte ont des options pour afficher explicitement blancheur. Ensuite, ils seront effectivement dessinés en tant que caractères, en plus de leur régulier Mise en forme Comportement (qui est aussi juste le interprétation de ces caractères).

Pure ASCII uniquement interprète 128 valeurs. Les octets utilisés pour stocker ces informations ont 256 valeurs possibles chacune, donc la moitié des valeurs éventuelles ne sont pas autorisées dans ASCII. Celles-ci sont par exemple utilisées dans une région spécifique à la région. Les ensembles de caractères, tels que latin 1, mais en ASCII, ils sont indéfinis. Ils n'ont aucune représentation utile dans un visualiseur de texte qui ne peut gérer que ASCII.


Données binaires n'est généralement pas interprété comme texte. Donc, dans ces fichiers, toutes les valeurs d'octets possibles On trouve couramment. Tout le reste serait inutile (et c'est une raison pour laquelle vous pouvez compresser très bien le texte). Les formats de fichier image sont compliqués et vous ne les considérez généralement pas comme texte, ils n'ont donc pas besoin d'être lisibles.

Comme il n'y a pas d'interprétation de données courante (jeu de caractères) qui mappe toutes les valeurs possibles aux caractères lisibles, et comme cela ne ferait pas beaucoup de sens de toute façon (car ce n'est pas un texte lisible), les principales pièces sont affichées comme gibberish.


Un éditeur hexagonal choisit une représentation différente pour les données: il affiche chaque octet sous forme de chiffres de deux hexadécimale . C'est juste une représentation différente et une avec un jeu de caractères facilement lisible à l'homme: tous les 256 valeurs d'octets possibles peuvent être représentés sous forme de deux chiffres hexagonales.

Comme il existe une mappage facile de données binaires à hex et vice versa (4 chiffres binaires à/à partir d'un chiffre hexadécimal) et le binaire contient très peu d'informations par chiffre, hexadécimal est généralement la voie préférée pour les humains à lire binaire, à moins d'être spécifique raisons de préférer une représentation différente.


Certains éditeurs de texte peuvent avoir un mode d'éditeur hexagonal et une heuristique qui a essayé de déterminer si un fichier est un texte ou un binaire, et de sélectionner automatiquement un mode ou l'autre. Mais cela peut être difficile à obtenir de la bonne et ce n'est pas une propriété spécifique du fichier qui dit s'il est un genre ou l'autre.


Certains clients FTP vous demandent de spécifier les fins de fichier utilisés pour Données texte. Ces programmes changeront ensuite le contenu du fichier pour correspondre au système d'exploitation de la machine que vous avez connecté, car Windows utilise une séquence de caractères de fin de ligne différente (CR/LF) que Linux et UNIX (y compris Mac OS X; LF).

84
Daniel Beck

Parce que vous l'avez ouvert dans un Texte Editor, pas A binaire Éditeur .

33

C'est tout à faire avec le contexte et l'interprétation. Ce qui est dans votre ordinateur est des motifs de tension élevée et basse tension, ou des régions magnétisées d'un disque, qui ne gagnent que de la signification lorsque nous décidons comment nous voulons les interpréter.

Dans des circonstances différentes, le motif à faible consommation de bas à basse faible-faible-faible-faible-faible-sommet signifie que le nombre 65, une lettre majuscule "A", une couleur bleue, qu'un client a commandé un café, la date de mars " 6ème ou quoi que ce soit du tout, vraiment.

Lorsque vous ouvrez votre fichier image dans un programme graphique, il sait l'interpréter comme une image, sait quels modèles indiquent le format d'image, quels modèles indiquent la taille de l'image et ainsi de suite.

Lorsque vous ouvrez votre fichier image dans un éditeur de texte, il est traité comme texte. C'est un format très simple, beaucoup plus proche de ce qui se passe vraiment sur l'ordinateur, mais il existe encore une certaine interprétation. Plus précisément, presque chaque motif est interprété comme un caractère particulier, certains normaux comme A-Z, mais aussi des personnages étranges. Quelques motifs ne s'affichent pas comme des personnages mais sont plutôt traités comme formatage de base: Newline, onglet.

(La situation est légèrement compliquée par des éléments tels que Unicode et des codages de texte tels que UTF-8, mais je ne traiterai pas avec ceux ici pour des raisons de simplicité.)

Lorsque vous avez un fichier binaire ouvert dans un éditeur de texte, veillez à ne pas modifier, car presque tout changement que vous effectuez perturbera complètement l'interprétation normale du contenu du fichier, c'est-à-dire que cela ruinera le fichier et le rendre inutilisable.

16
Andrew Turner

En exemple simplifié, envisagez un fichier image ouvert avec un éditeur de texte.

L'image est un motif d'échecs simple, avec les carrés de 3 pixels larges et une bordure grise de 1 pixel entre chaque carré. - Trois pixels noirs, pixel à bordure gris, trois pixels blancs, un pixel de bordure gris, répéter.

La première ligne de cette image aurait la valeur suivante quatre fois:

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

(En hex, plutôt que binaire - la chaîne en binaire serait quatre fois plus longue - 0x7f étant remplacée par 0B01111111)

Si vous chargez cette chaîne de données dans un éditeur de texte, vous obtiendrez le texte suivant:

[NUL] [NUL] [NUL] [NUL] [NUL] [NUL] [NUL] [NUL] [NUL] [NUL] [NUL] [Del] [Del] [Del] [vide] [vide] [vide] [vide] [vide] [vierge] [vide ] [Blanc] [Blanc] [Blanc] [Blanc] [Del] [Del] [Del] [Del]

Ceci est dû au fait que 0x00 est le ASCII code pour la valeur NULL et que vous devez écrire cela 3 fois pour obtenir la valeur d'un pixel noir (en 24bit BMP Quoi qu'il en soit) et que vous avez 3 pixels noirs. Ensuite, 0x7f est le ASCII code pour Supprimer et vous avez besoin de trois fois pour obtenir un pixel gris. 0xFF n'est pas Valud ASCII code pour quoi que ce soit en particulier - même dans l'étendue ASCII = et vous devez l'écrire à 9 fois pour obtenir 3 pixels blancs. Finisez-le, vous obtenez trois autres suppressions à Écrivez un pixel gris.

Un moyen différent de le montrer, ce qui pourrait être plus utile explicatif, est l'exemple inverse - que devez-vous écrire dans un fichier afin d'obtenir des zéros et ceux lors de l'ouverture d'un éditeur de texte?

The ASCII codes pour zéro et un, bien sûr! Un zéro dans un éditeur de texte n'est pas stocké comme un seul bit avec valeur 0, il est stocké sous forme de 8 bits avec valeur 0B00110000, ou hex 0x30

Le ASCII code pour '0' est 0x30 et le ASCII code pour '1' est 0x31, donc si vous souhaitez stocker un motif d'échecs comme zéros Et ceux, votre fichier ressemblera à ceci:

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

Il y en a beaucoup plus que ceci - les fichiers n'ont commencé et s'arrêtant et les métadonnées, ainsi que tous les autres types de choses, mais la leçon à prise et réponses à votre question sont les suivantes:

Sauf si les 8 premiers bits de votre fichier sont 0B00110000, votre éditeur de texte n'écrira pas "0" car c'est le code ASCII pour le caractère '0'. Sauf si les 8 premiers bits Ouf votre fichier sont 0B00110001, votre éditeur de texte n'écrira pas "1" car c'est le code ASCII pour le caractère '1'.

3
medivh