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

51

Pourquoi ne voyez-vous pas le code binaire lorsque vous ouvrez un fichier binaire avec un éditeur de texte? Par exemple, lorsque j'ouvre une image avec un éditeur de texte, je vois des caractères étranges ainsi que des caractères lisibles par l'homme. mais l'image doit être encodée en binaire.

Templier
la source
8
A quoi vous attendiez-vous? Comment pensez-vous que cela devrait être archivé?
Nikodemus RIP
2
Je me demande pourquoi davantage d’éditeurs n’offrent pas le binaire sous forme de séquences ASCII 1/0 brutes.
Xeoncross
7
@Xenocross: parce que la séquence brute 0/1 est inutile, elle est trop lourde pour le décodage manuel car elle nécessite beaucoup d'espace à l'écran. l'affichage hexadécimal est généralement plus performant pour le décodage manuel. Et avec un peu d’entraînement, vous pouvez rapidement et facilement traduire hex en binaire et inversement.
Lie Ryan
3
@Fiasco Labs: Pedantry: un nombre hexadécimal avec deux chiffres - 00 à FF, qui se traduit par un nombre décimal compris entre 0 et 255 (8 bits représentant 2 ^ 8 = 256 états possibles).
Piskvor
1
@Piskvor - Merci de l'avoir mis mieux que moi. deadbeef est un nombre hexadécimal à 8 chiffres, pour l'enregistrement. ; ^)
Fiasco Labs le

Réponses:

83

Les données binaires et textuelles ne sont pas séparées: ce sont simplement des données . Cela dépend de l'interprétation qui les rend l'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 celles-ci n'aura aucun sens, car elles ne correspondent pas à l' interprétation choisie (en tant que texte).

Ce que vous appelez du texte est un sous - ensemble du contenu possible du fichier: Les données d’un jeu de caractères donné sont converties en caractères lisibles.

Par exemple, en ASCII , vous pouvez constater que sur 128 valeurs "autorisées", environ la moitié seulement sont des lettres et des chiffres, 30% sont des signes de ponctuation et les autres sont des caractères de contrôle . Ce dernier groupe n’est tout simplement pas très utilisé dans les fichiers texte et n’a pas de représentation textuelle vraiment satisfaisante. Certains d'entre eux sont des caractères Tab et Newline , pour lesquels les éditeurs de texte doivent déjà faire preuve de créativité pour les afficher.

Certains éditeurs de texte ont des options pour afficher explicitement les espaces. Ensuite, ils seront réellement dessinés sous forme de caractères, en plus de leur comportement de mise en forme habituel (qui est également simplement l' interprétation de ces caractères).

L’ASCII pur n’interprète que 128 valeurs. Les octets utilisés pour stocker cette information ont 256 valeurs possibles, donc la moitié des valeurs possibles ne sont pas autorisées en ASCII. Ceux-ci sont par exemple utilisés dans des jeux de caractères spécifiques à une région, tels que Latin 1, mais en ASCII, ils ne sont pas définis. Ils n'ont aucune représentation utile dans un afficheur de texte qui ne peut gérer que l'ASCII.


Les données binaires ne sont généralement pas interprétées comme du texte. Ainsi, dans ces fichiers, toutes les valeurs d'octet possibles sont couramment trouvées. Tout le reste serait un gaspillage (et c'est une raison pour laquelle vous pouvez très bien compresser du texte). Les formats de fichier image sont compliqués et vous ne les voyez généralement pas sous forme de texte. Ils n'ont donc pas besoin d'être lisibles.

Comme il n’existe pas d’interprétation de données commune (jeu de caractères) qui mappe toutes les valeurs possibles en caractères lisibles, et comme cela n’aurait aucun sens de toute façon (vu que ce n’est pas du texte lisible), les parties principales sont affichées sous forme de charabia.


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

Etant donné qu’il est facile de mapper les données binaires en hexadécimal et inversement (4 chiffres binaires entre un chiffre hexadécimal), et que binaire contient très peu d’informations par chiffre, l’hexadécimal est généralement le moyen préféré de lecture des fichiers binaires, sauf indication contraire. raisons de préférer une représentation différente.


Certains éditeurs de texte peuvent avoir un mode éditeur hexadécimal et une méthode heuristique qui tentent de déterminer si un fichier est un fichier texte ou binaire et sélectionnent automatiquement l'un ou l'autre mode. Mais cela peut être difficile à comprendre et ce n'est pas une propriété spécifique du fichier qui dit s'il s'agit d'un type ou d'un autre.


Certains clients FTP vous demandent de spécifier les fins de fichier utilisées pour les données texte . Ces programmes modifieront ensuite le contenu du fichier en fonction du système d'exploitation de la machine à laquelle vous êtes connecté, car Windows utilise une séquence de caractères de fin de ligne ( CR/LF) différente de celle de Linux et Unix (y compris Mac OS X; LF).

Daniel Beck
la source
4
Ughh, la FL m'a mordue plus de fois que je ne tiens à m'en souvenir.
surfasb
32

Parce que vous l'avez ouvert dans un éditeur de texte , pas un éditeur binaire .

Ignacio Vazquez-Abrams
la source
22
Comme vous l'avez vu, texte.
Ignacio Vazquez-Abrams Le
1
Texte sous forme de représentation de nombres hexadécimaux (0-f) disposés par paires (octets). Si vous voulez du binaire, convertissez-le en binaire en une chaîne insensée de zéros et de uns. Hex est plus lisible par l'homme et plus facile à comprendre.
Fiasco Labs
2
Je dois dire que: quelqu'un devrait prendre l'audace de publier un éditeur binaire, avec Ones et Zéros , (et peut-être ensuite séparer les volets avec les translittérations hex / char / dec associées) dans le seul but d'enseigner ce genre de choses. Je sais qu'ils ne devraient pas, mais les médias populaires et les professeurs de mathématiques prétendant connaître les ordinateurs ont faussé toutes les attentes des enfants désireux d'apprendre.
ZJR
@ZJR: Aucune raison pour laquelle ils ne devraient pas. De nombreux éditeurs hexadécimaux vous permettent d’afficher le contenu du fichier en binaire. En général, les programmeurs ne la trouvent pas aussi utile que la vue hexadécimale, vous en entendez donc moins parler.
David Z
16

Tout cela a à voir avec le contexte et l'interprétation. Votre ordinateur contient des motifs de haute et basse tension, ou des régions magnétisées d'un disque, qui ne gagnent en sens lorsque nous décidons de la façon dont nous voulons les interpréter.

Dans des circonstances différentes, le motif bas-haut-bas-bas-bas-bas-bas-bas-haut pourrait signifier le nombre 65, une lettre majuscule 'A', une couleur bleu ciel, qu'un client a commandé du café, la date 'mars 6ème ou quoi que ce soit, vraiment.

Lorsque vous ouvrez votre fichier image dans un programme graphique, il sait l’interpréter comme une image, sait quels motifs indiquent le format de l’image, quels motifs indiquent la taille de l’image, etc.

Lorsque vous ouvrez votre fichier image dans un éditeur de texte, il est traité comme du texte. C'est un format très simple, beaucoup plus proche de ce qui se passe réellement dans l'ordinateur, mais une interprétation est encore en cours. Plus précisément, presque tous les motifs sont interprétés comme des caractères particuliers, certains normaux comme AZ, mais aussi des personnages étranges. Quelques modèles n'apparaissent pas sous forme de caractères, mais sont traités comme un formatage de base: nouvelle ligne, tabulation.

(La situation est légèrement compliquée par des éléments tels que Unicode et des encodages de texte tels que UTF-8 mais je ne traiterai pas de ceux-ci par souci de simplicité.)

Lorsque vous avez un fichier binaire ouvert dans un éditeur de texte, veillez à ne pas apporter de modifications, car presque toutes les modifications que vous apportez perturberont complètement l'interprétation normale du contenu du fichier, autrement dit, cela ruinerait le fichier et le rendrait inutilisable.

Andrew Turner
la source
3

Comme exemple simplifié, considérons un fichier image ouvert avec un éditeur de texte.

L'image est un motif d'échecs simple, avec des carrés de 3 pixels de large et une bordure grise de 1 pixel entre chaque carré. - trois pixels noirs, un pixel de bordure grise, trois pixels blancs, un pixel de bordure grise, répétez.

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 hexadécimal plutôt qu'en binaire - la chaîne en binaire serait quatre fois plus longue - 0x7F étant remplacé 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] [Suppr] [Suppr] [Suppr] [Suppr] [Vierge] [Vierge] [Vierge] [Vierge ] [Blank] [Blank] [Blank] [Blank] [Suppr] [Suppr] [Suppr]

En effet, 0x00 est le code ASCII de la valeur Null et vous devez l'écrire 3 fois pour obtenir la valeur d'un pixel noir (dans le format BMP 24 bits quand même) et vous disposez de 3 pixels noirs. Alors 0x7F est le code ASCII pour supprimer, et vous avez besoin de trois fois pour obtenir un pixel gris. 0xFF ne vaut pas le code ASCII valud pour quelque chose en particulier - même dans le jeu ASCII étendu - et vous devez l'écrire 9 fois pour obtenir 3 pixels blancs. En terminant, vous obtenez trois autres suppressions pour écrire un pixel gris.

Une autre façon de le montrer, ce qui pourrait être plus explicatif, est l’exemple inverse: que devez-vous écrire dans un fichier pour obtenir des zéros et des uns lorsqu’il est ouvert dans un éditeur de texte?

Les codes ASCII pour zéro et un, bien sûr! Un zéro dans un éditeur de texte n'est pas stocké en tant que bit unique avec la valeur 0, il est stocké en tant que 8 bits avec la valeur 0b00110000 ou en hexadécimal 0x30.

Le code ASCII pour '0' est 0x30 et le code ASCII pour '1' est 0x31. Si vous voulez stocker un motif d'échecs en tant que zéros et uns, 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 a bien plus que cela: les fichiers ont des débuts, des arrêts, des métadonnées et toutes sortes d'autres choses, mais la leçon à tirer et la réponse à votre question sont les suivantes:

À moins que les 8 premiers bits de votre fichier ne soient 0b00110000, votre éditeur de texte n'écrira pas '0' car il s'agit du code ASCII du caractère '0'. À moins que les 8 premiers bits de votre fichier ne soient 0b00110001, votre éditeur de texte n'écrira pas '1' car il s'agit du code ASCII du caractère '1'.

medivh
la source
0

L'éditeur n'est pas assez intelligent pour déterminer si un texte a un sens ou non. Il affiche donc un fichier sous forme de texte, sauf indication contraire, s'il dispose de cette fonctionnalité. Comme d'autres l'ont souligné, certains éditeurs ont la fonction d'afficher hex.

Emilio M Bumachar
la source
UltraEdit est assez intelligent - il passe en mode d'édition hexadécimale pour de tels fichiers.
Peter Mortensen