17.1. Contenu d’un fichier binaire et de son équivalent texte

Icône de l'outil pédagogique Contenu d’un fichier binaire et de son équivalent texte

Ce paragraphe peut être sauté dans un premier temps. Il permet de mieux comprendre ce que contiennent un fichier binaire et un fichier texte utilisés pour stocker les mêmes données : ici un réel, un entier et une phrase.

Exemple 95. Contenu d’un fichier texte et binaire (avec des données identiques)

On veut stocker le réel double ‐1.60217e‐19, l’entier short ‐25724 et la chaîne de 5 caractères "bof !", ces trois informations étant contenues dans une variable structurée var_stru.

Pour chaque mode d’accès (binaire ou texte), voici l’instruction C à utiliser ainsi que le contenu résultant pour les fichiers binaires et textes.

On rappelle qu’un caractère entre apostrophes est le code ASCII du caractère. Par exemple, ‘a’ est le code ASCII de la lettre a, c'est-à-dire l’entier 97 (ou 0x61).

Solution 1 : fichier en accès binaire

Solution 2 : fichier en accès texte

Taille des fichiers :

– La taille du fichier binaire de la solution 1 est toujours la même (8+2+6=16 octets), quelles que soient les valeurs du réel et de l’entier.

– la taille du fichier texte de la solution 2 dépend beaucoup du nombre de chiffres significatifs du réel et de l’entier, et donc des codes formats utilisés dans fprintf. Ici, on obtient 26 octets, y compris les deux espaces rajoutés pour séparer les valeurs.

Contenu affiché par un éditeur de texte :

Si on ouvre le fichier avec un éditeur de texte quelconque, on obtient bien sûr « n’importe quoi » pour le fichier 1 (il ne contient pas des codes ASCII), et le texte attendu pour le fichier 2 :

Contenu hexadécimal de chaque fichier

Les octets des deux fichiers valent les valeurs hexadécimales suivantes (obtenues par un programme) :

On reconnaît dans le fichier 2 les codes de la table des codes ASCII (fournie en annexe) : 0x2D est le code du signe -, 0x20 est le code de l’espace, 0x3y est le code du chiffre y…

On reconnaît aussi la chaîne "bof !", qui est présente à la fin des deux fichiers. Notez que son caractère nul final a été supprimé par sprintf, mais pas par fwrite (pour fwrite, ce caractère nul n’a rien de spécial).