web-dev-qa-db-fra.com

Où est le code hexadécimal du caractère "EOF"?

Autant que l'on sache à la fin de tous les fichiers, spécialement les fichiers texte, il existe un code Hex pour le caractèreEOFouNULL. Et lorsque nous voulons écrire un programme et lire le contenu d'un fichier texte, nous envoyons la fonction de lecture jusqu'à ce que nous recevions cet hexcode EOF.

Ma question: j'ai téléchargé des outils pour voir une vue hexagonale d'un fichier texte. mais je ne vois aucun code hexadécimal pourEOF(Fin de fichier/NULL) ouEOT(Fin de texte)


Tables de codes ASCII/Hex:

enter image description here

Voici la sortie des outils de visualisation Hex:

enter image description here


Remarque: Mon fichier d'entrée est un fichier texte dont le contenu est "Où se trouve le code hexadécimal de" EOF "?"

Appréciez votre temps et votre considération.

34
user3739941

Il n’existe pas de caractère EOF . Le système d'exploitation sait exactement combien d'octets un fichier contient (ceci est stocké avec d'autres métadonnées telles que les autorisations, la date de création et le nom), et peut donc indiquer aux programmes atteint la fin du fichier, il n’ya plus d’octets à lire.

En fait, la valeur "EOF" renvoyée par exemple par les fonctions C telles que getchar est explicitement une valeur inten dehors de la plage d'un octet.

Parfois, certains formats de fichiers exigent l'ajout de terminateurs NUL (probablement parce que c'est ainsi que les chaînes sont stockées en C), bien qu'elles délimitent généralement plusieurs enregistrements dans un seul fichier, pas le fichier dans son ensemble. Et une telle décoration empêche généralement un fichier d'être considéré comme un "fichier texte".

Les codes ASCII tels que ETX et NUL remontent à l’époque des téléscripteurs et des amis. NUL est utilisé en C pour les chaînes in-memory, mais cela n'a aucune incidence sur les systèmes de fichiers.

35
user395760

Il y avait - il y a très longtemps - un marqueur Fin de fichier mais il n'a pas été utilisé dans les fichiers pendant de nombreuses années.

Vous pouvez en démontrer un écho lointain sur Windows en utilisant:

C:\>copy con junk.txt
Hello
Hello again
- Press <Ctrl> and <z>
C:\>dump junk.txt
junk.txt:
00000000  4865 6c6c 6f0d 0a48 656c 6c6f 2061 6761 Hello..Hello aga
00000010  696e 0d0a                               in..
C:\>

Notez l'utilisation de Ctrl-Z comme marqueur EOT.

Cependant, notez également que le Ctrl-Z n'apparaît plus dans le fichier - il apparaissait auparavant sous la forme d'un 0x1a mais uniquement sur certains systèmes d'exploitation et même de manière non cohérente.

L'utilisation de ETX (0x03) s'est arrêtée même avant ces heures sombres et lointaines.

15
OldCurmudgeon

EOF n'existe pas. EOF n'est qu'une valeur renvoyée par les fonctions de lecture de fichier pour vous indiquer que le pointeur de fichier a atteint la fin du fichier.

7
David Xu

Nom EOT (0x04) Sélectionnez un nom pour écrire un commentaire. Вы вводите это сCtrl+D(е. ^D), чтобы завершить ввод в оболочку или любую другую программу чтения из стана.

Однако, как отмечали другие, то отличается от EOF, который является условием, а не честая.

2
kralyk

Il était une fois même différents caractères EOF (pour différents systèmes d'exploitation). On n'en voit plus. (En règle générale, les fichiers se trouvaient en blocs de 128 octets.) Pour coder un PITA, comme aujourd'hui les nomenclatures.

À la place, il existe toujours un int read() qui délivre normalement une valeur d'octet, mais pour EOF, il fournit -1.

Le caractère NUL est un terminateur de chaîne en C. En Java, vous pouvez avoir un caractère NUL au milieu d'une chaîne. Pour coopérer avec C, les octets UTF-8 générés utilisent un codage sur plusieurs octets, à la fois pour les caractères Unicode> 127 et pour NUL.

(Une partie de cela est probablement déjà connue.)

1
Joop Eggen

Dans le monde Wintel 7 bits, il s'agit de 0x1A ou chr (26).

On le trouve encore couramment dans les anciens fichiers texte et archives et est toujours produit par certains protocoles de transmission de fichiers. En particulier, les fichiers texte téléchargés à partir de systèmes BBS se terminaient généralement avec ce caractère.

Il existe d'autres valeurs sentinelles de ce type pour les systèmes plus anciens et, comme l'EOL (CR, LF, CR + LF), il faut anticiper de temps à autre.

Cela peut être une source de contrariété de le voir toujours utilisé, au même niveau que return (0) par exemple. 

0
mckenzm