web-dev-qa-db-fra.com

Le stockage de données en texte brut prend-il moins d'espace que le stockage du message équivalent en binaire?

En tant que développeur web, j'ai très peu de compréhension des données binaires.

Si je prends la phrase "Bonjour tout le monde.", La convertis en binaire et la stocke en tant que binaire dans une base de données SQL, elle semble comme les 1 et les 0 prendraient plus d'espace que les lettres. Il me semble que l'utilisation de lettres reviendrait à utiliser la compression, où un symbole représente plusieurs.

Mais est-ce vraiment ainsi que cela fonctionne?

Le stockage de données en texte brut prend-il moins d'espace que le stockage du message équivalent en binaire?

32
john doe

Le texte en clair est binaire.

Lorsque vous écrivez un H sur un disque dur, la tête d'écriture ne découpe pas deux lignes verticales et une ligne horizontale dans le plateau, elle code magnétiquement les bits 010010001 dans le plateau.

À partir de là, il devrait être évident que le stockage de données en texte brut occupe exactement la même quantité d'espace que le stockage de données binaires.

Mais le texte en clair n'est qu'un2 format binaire particulier

Le texte en clair peut être transformé de manière réversible en d'autres formats binaires. Une transformation courante est la compression qui généralement donne une représentation plus compacte, ce qui signifie moins de bits utilisés pour représenter les mêmes informations.

Selon ce que vous utilisez le texte en clair pour représenter, vous pourrez peut-être utiliser différents formats binaires pour représenter les mêmes informations. Cela peut utiliser plus d'espace, il peut en utiliser moins.

Par exemple, les nombres 5 et 1234567 pourrait être représenté en texte brut à l'aide de caractères numériques, ce qui entraînerait ces séquences de bits sur le disque3:

00110101 00000000
00110001 00110010 00110011 00110100 00110101 00110110 00110111 00000000

Alternativement, vous pouvez utiliser 32 bits complément à deux :

00000000 00000000 00000000 00000101
00000000 00010010 11010110 10000111

Ce qui est une représentation moins compacte de 5, mais une représentation plus compacte de 1234567.

Et il existe un nombre littéralement infini d'autres représentations qui auraient des niveaux variables de compacité et de flexibilité, bien que, dans la pratique, beaucoup moins que de nombreuses représentations soient réellement utilisées.


1 En supposant UTF-8. La séquence exacte de bits d'un caractère dépend du codage spécifique que vous utilisez.

2 Ou vraiment, plusieurs formats, compte tenu des divers encodages .

3 Si vous vous demandez ce que sont ces huit zéros aux extrémités, eh bien, vous avez besoin d'un moyen de savoir combien de temps les données sont. Les options se résument essentiellement à un marqueur (je l'ai utilisé, via un octet nul), à un espace dédié au stockage de la longueur (Pascal a utilisé un octet pour stocker la longueur d'une chaîne) ou à une taille fixe (utilisée dans le complément à deux suivant). exemple).

134
8bittree

Je trouve cela très amusant à penser. Le binaire n'est pas 1s et 0s dans la façon dont vous en parlez.

Imaginez qu'il y ait une quantité, je peux vous dire de quelle quantité il s'agit de différentes manières:

  • Nine en anglais
  • Neuf en français
  • 9 en chiffres arabes
  • IX en chiffres romains
  • 1001 en binaire avec chiffres arabes
  • on off off on en binaire avec on/off
  • high low low high en binaire représenté avec des tensions ou des leviers ou des niveaux d'eau ou une charge électrique ... ou les mots anglais 'high' et 'low'

Ils représentent tous la même chose. Le point ici est que le binaire n'est pas 1 et 0, ce n'est qu'une façon de représenter une valeur.

Lorsque vous parlez de convertir un H en binaire, vous imaginez probablement voir 10101010 à l'écran - mais ce n'est pas "binaire", c'est un chiffre pour chaque bit binaire.

Oui, si vous convertissez H en "binaire" comme les gens en parlent normalement, puis que vous le représentez en chiffres arabes et que vous le stockez, cela prendrait plus d'espace de la même manière que la conversion de H à aitch prend plus d'espace.

Mais vous pouvez voir que le binaire est une façon de représenter une quantité, bien par cette logique qui dit "si je convertissais H en binaire et le représentais comme high low high low high low high low alors il faudrait 35 caractères! C'est encore plus que 10101010! Mais ces deux-là sont tous les deux "binaires".

L'autre côté est de se demander comment H est stocké par un ordinateur, et de voir que H n'est lui-même qu'un moyen de représenter une quantité - la même quantité 72, 01001000, ou seventy two ou ASCII code de caractère H. Quelle est la réponse de 8bittree que le texte brut is binaire, mais c'est moi qui essaie de montrer ce que cela - signifie.

Vous obtenez donc un motif de bits dans un ordinateur 01001000 et qu'est-ce que cela veut dire? N'importe quoi - pourrait être considéré comme un nombre, comme une partie d'un fichier Zip, comme un personnage, selon l'intention de la personne qui l'a créé. Si vous savez que c'est censé être du texte brut, cela vient d'un codage de caractères H -> 01001000 et vous le recherchez dans l'autre sens dans le tableau de codage des caractères - ASCII, UTF-8, shift-jis, etc. et trouvez le bon caractère de police et un H ou autre sortira. Ou le mauvais caractère apparaît si vous utilisez une recherche de codage différente de celle utilisée par la personne qui l'a créé. Il s'agit du lien @Eric Lippert.

Mais au moment où j'écris ceci, et en y réfléchissant, H est un octet et 01001000 est de 8 octets, oui c'est plus d'espace. Et oui, c'est (une représentation de) binaire. Mais c'est à un niveau d'abstraction plus élevé que celui de l'ordinateur - binaire affiché en caractères ASCII, où chaque caractère est représenté en arrière-plan avec un motif de bits binaires, chacun aussi grand que le H seul.

16

Le stockage de données en texte brut prend-il moins d'espace que le stockage du message équivalent en binaire?

Non jamais.

Votre ordinateur stocke déjà les données en texte brut dans la représentation binaire équivalente. Stocker quelque chose sous forme de texte brut par rapport à binaire indique simplement comment l'ordinateur doit interpréter ce flux binaire identique.

Il me semble que l'utilisation de lettres reviendrait à utiliser la compression, où un symbole représente plusieurs.

C'est un peu vrai. Un caractère représentera plus d'un bit. Le problème est que ce sont des choses de tailles différentes. Il ne faut qu'un bit pour stocker un 1 ou un 0, mais 8 bits (ou plus) pour stocker un caractère de texte brut. Vous ne gagnez rien en utilisant des personnages.

Si quelque chose , vous pouvez compresser les choses dans l'autre sens. Après tout, 8 bits correspondent à 256 valeurs possibles différentes, mais le texte brut est généralement limité à des lettres, des chiffres et quelques caractères de ponctuation. Il n'a pas besoin d'autant de bits qu'il le faut.

13
Telastyn