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

autant que vous le savez à la fin de tous les fichiers, spécialement les fichiers texte, il y a un code hexadécimal pour EOF ou NULL personnage. Et quand 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 EOF hexcode.

Ma question : j'ai téléchargé quelques outils pour voir un hex d'un fichier texte. mais je ne vois pas de code hexadécimal pour EOF(à la Fin Du Fichier/NULL) ou EOT(Fin De Texte)


tables de codes ASCII/Hex :

enter image description here

ceci est la sortie des outils de visualisation Hex:

enter image description here


Note: mon fichier d'entrée est un fichier texte dont le contenu est "Où est le code hex de "EOF"?"

J'apprécie votre temps et votre considération.

33
demandé sur OldCurmudgeon 2014-07-28 13:06:39

6 réponses

Il n'y a pas une telle chose comme un 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 comme les permissions, la date de création et le nom), et donc peut indiquer les programmes qui essaient de lire le onzième octet d'un fichier de dix octets: Vous avez atteint la fin du fichier, il n'y a plus d'octets à lire.

en fait, la valeur "EOF" retournée par exemple par les fonctions C comme getchar est explicitement un int valeur en dehors de la plage d'un octet, donc il ne peut pas être stocké dans un fichier!

parfois, certains formats de fichier insistent sur l'ajout de terminateurs NUL (probablement parce que c'est ainsi que les chaînes sont habituellement stockées en C), bien que généralement ces délimitent plusieurs enregistrements dans un seul fichier, pas le fichier dans son ensemble. Et cette décoration habituellement disqualifie un fichier d'être considérée comme un "fichier texte".

mémoire chaînes, mais cela n'a aucune incidence sur les systèmes de fichiers.

33
répondu 2014-07-28 09:29:18

il y avait-il y a longtemps-un Fin Du Fichier marqueur, mais il n'a pas été utilisé dans les fichiers pour 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 aussi que le Ctrl-Z n'apparaît plus dans le fichier - il apparaissait comme un 0x1a mais seulement sur certains systèmes d'exploitation et même pas de façon uniforme.

Utilisation de ETX (0x03) s'arrêta même avant ces temps sombres et lointains.

14
répondu OldCurmudgeon 2014-07-28 09:42:51

il n'y a rien de tel que L'EOF. EOF est juste une valeur retournée par les fonctions de lecture de fichier pour vous dire que le pointeur de fichier atteint la fin du fichier.

8
répondu David Xu 2014-07-28 09:13:29

il y avait même des caractères EOF différents (pour différents systèmes d'exploitation). N'a plus vu un seul. (Typiquement les fichiers étaient en blocs de 128 octets.) Pour coder une PITA, comme de nos jours BOMs.

au lieu de cela il y a toujours un int read() qui fournit normalement une valeur de byte, mais pour EOF délivre -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 être coopératif avec C, les octets UTF-8 générés utilisent un encodage de plusieurs octets à la fois pour les caractères Unicode > 127 et pour NUL.

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

1
répondu Joop Eggen 2014-07-28 09:22:58

EOT byte (0x04) est utilisé à ce jour par les terminaux tty unix pour indiquer la fin de l'entrée. Vous tapez avec un Ctrl+ D (ie. ^D) pour mettre fin à l'entrée des shells ou à toute autre lecture de programme de stdin.

cependant, comme d'autres l'ont fait remarquer, ceci est distinct de EOF, qui est une condition plutôt qu'un élément de données en soi.

0
répondu kralyk 2018-05-08 15:30:49

vous avez besoin de la fin du caractère de fichier dans certains cas par exemple envoyer un fichier à une imprimante à partir d'un ordinateur Unix. La plupart des imprimantes compatibles windows/dos s'attendent à ce que le marqueur de fin de fichier imprime le fichier stocké dans leurs mémoires. Si aucun marqueur de fin de fichier n'est envoyé, l'imprimante reste assise jusqu'à ce qu'elle soit épuisée (normalement 2 minutes), puis imprime le fichier. Si vous utilisez lpr pour imprimer à partir D'Unix, vous devez vous assurer d'inclure le marqueur de fin de fichier. Windows / dos le fixent automatiquement et le les imprimantes sont conçues pour attendre fot.

-1
répondu Carlos R Canas 2015-03-27 21:06:51