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 bizarres et aussi des caractères lisibles par l'homme ; mais l'image devrait être codée en binaire.
Réponses
Trop de publicités?Binaire y 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 l'un ou l'autre. Si vous ouvrez des données binaires (comme un fichier image) dans un éditeur de texte, la plupart d'entre elles n'auront aucun sens, car elles ne correspondent pas à l'interprétation que vous avez choisie. interprétation (en tant que texte).
Ce que vous appelez texte est un sous-ensemble des contenus possibles du fichier : Les données qui, dans un jeu de caractères traduit en caractères lisibles.
Par exemple, dans ASCII vous pouvez constater que, sur les 128 valeurs "autorisées", seulement la moitié environ sont des lettres et des chiffres, 30 sont des signes de ponctuation, et le reste est constitué de lettres et de chiffres. caractères de contrôle . Ce dernier groupe n'est pas beaucoup utilisé dans les fichiers texte, et il n'a pas de représentation textuelle vraiment bonne. Certains d'entre eux sont Onglet y Nouvelle ligne où les éditeurs de texte doivent déjà faire preuve de créativité pour les afficher.
Certains éditeurs de texte disposent d'options permettant d'afficher explicitement les espaces blancs. Dans ce cas, ils seront effectivement dessinés en tant que caractères, en plus de leurs caractères habituels. mise en forme (qui n'est aussi que le interprétation de ces personnages).
L'ASCII pur n'interprète que 128 valeurs. Les octets utilisés pour stocker ces informations ont chacun 256 valeurs possibles, de sorte que la moitié des valeurs possibles ne sont pas autorisées en ASCII. Ces valeurs sont par exemple utilisées dans des jeux de caractères spécifiques à une région, comme Latin 1, mais en ASCII, elles sont indéfinies. Elles n'ont aucune représentation utile dans un visualisateur de texte qui ne peut traiter que l'ASCII.
Données binaires n'est généralement pas interprété comme du texte. Donc, dans ces fichiers, toutes les valeurs d'octets possibles sont couramment trouvés. Tout le reste serait du gaspillage (et c'est une raison pour laquelle vous pouvez très bien compresser le texte). Les formats de fichier image sont compliqués et vous ne les considérez généralement pas comme du texte, ils n'ont donc pas besoin d'être lisibles.
Comme il n'existe pas d'interprétation commune des données (jeu de caractères) qui permette de convertir toutes les valeurs possibles en caractères lisibles, et comme cela n'aurait pas beaucoup de sens de toute façon (puisqu'il ne s'agit pas d'un texte lisible), la plupart des parties sont affichées sous forme de charabia.
Un éditeur hexagonal choisit une représentation différente pour les données : Il affiche chaque octet comme deux hexadécimal digits. Il s'agit simplement d'une représentation différente, avec un jeu de caractères facilement lisible par l'homme : Les 256 valeurs d'octets possibles peuvent être représentées par deux chiffres hexadécimaux.
Étant donné qu'il est facile de convertir des données binaires en hexadécimales et vice versa (4 chiffres binaires pour un chiffre hexadécimal), et que le binaire contient très peu d'informations par chiffre, l'hexadécimal est généralement le mode de lecture préféré des humains, sauf s'il existe des raisons spécifiques de préférer une autre représentation.
Certains éditeurs de texte peuvent avoir un mode éditeur hexagonal et une certaine heuristique qui essayait de déterminer si un fichier est textuel ou binaire, et de sélectionner automatiquement un mode ou l'autre. Mais cela peut être difficile à réaliser correctement et ce n'est pas une propriété spécifique du fichier qui indique s'il s'agit d'un type ou d'un autre.
Certains clients FTP vous demandent de spécifier les terminaisons de fichiers utilisées pour données du texte . Ces programmes modifieront ensuite le contenu du fichier pour qu'il corresponde au système d'exploitation de la machine à laquelle vous êtes 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
).
Parce que vous l'avez ouvert dans un texte éditeur, et non un binaire éditeur .
Tout est question de contexte et d'interprétation. Ce qui se trouve dans votre ordinateur, ce sont des schémas de haute et de basse tension, ou des régions magnétisées d'un disque, qui n'ont de sens que lorsque nous décidons comment les interpréter.
Dans d'autres circonstances, le motif bas-haut-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 "6 mars" ou n'importe quoi d'autre, vraiment.
Lorsque vous ouvrez votre fichier image dans un programme graphique, celui-ci 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. Il s'agit d'un format très simple, beaucoup plus proche de ce qui se passe réellement dans l'ordinateur, mais il y a toujours une part d'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 caractères bizarres. Quelques motifs n'apparaissent pas comme des 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 l'Unicode et les codages de texte tels que l'UTF-8, mais je n'en parlerai pas ici pour des raisons de simplicité).
Lorsque vous avez un fichier binaire ouvert dans un éditeur de texte, veillez à ne pas y apporter de modifications, car presque toutes les modifications que vous faites vont complètement perturber l'interprétation normale du contenu du fichier, c'est-à-dire qu'elles vont ruiner le fichier et le rendre inutilisable.
À titre d'exemple simplifié, considérons un fichier image ouvert avec un éditeur de texte.
L'image est un simple motif d'échecs, 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 gris, trois pixels blancs, un pixel de bordure gris, répétition.
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][Del][Del][Del][Blank][Blank][Blank][Blank][Blank][Blank][Blank][Blank][Blank][Del][Del][Del]
En effet, 0x00 est le code ASCII pour la valeur Null et vous devez l'écrire 3 fois pour obtenir la valeur d'un pixel noir (en BMP 24 bits de toute façon) et vous avez 3 pixels noirs. Ensuite, 0x7F est le code ASCII pour la valeur Delete, et vous devez écrire cela 3 fois pour obtenir un pixel gris. 0xFF n'est pas un code ASCII valable pour quelque chose en particulier - même dans le jeu ASCII étendu - et vous devez l'écrire 9 fois pour obtenir 3 pixels blancs. Pour finir, il faut encore trois suppressions pour écrire un pixel gris.
Une autre façon de le montrer, qui pourrait être plus utilement explicative, 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 le zéro et le un, bien sûr ! Dans un éditeur de texte, un zéro n'est pas stocké sous la forme d'un bit unique de valeur 0, mais sous la forme de 8 bits de valeur 0b00110000, ou en hexadécimal 0x30.
Le code ASCII pour '0' est 0x30, et le code ASCII pour '1' est 0x31, donc si vous voulez stocker un motif d'échecs sous forme de zéros et de 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 beaucoup plus que cela - les fichiers ont des débuts et des fins, des métadonnées et toutes sortes d'autres choses, mais la leçon à retenir et la réponse à votre question est la suivante :
Si les 8 premiers bits de votre fichier ne sont pas 0b00110000, votre éditeur de texte n'écrira pas '0' car c'est le code ASCII du caractère '0'. Si les 8 premiers bits de votre fichier ne sont pas 0b00110001, votre éditeur de texte n'écrira pas '1' car c'est le code ASCII du caractère '1'.
L'éditeur n'est pas assez intelligent pour déterminer si un texte a un sens ou non, il affiche donc tout fichier sous forme de texte, à moins qu'on ne lui demande spécifiquement de faire autrement, s'il dispose de cette fonctionnalité. Comme d'autres l'ont souligné, certains éditeurs ont la possibilité d'afficher les hexadécimales.