Codice EOF ASCII / HEX nei file di testo


1

Per quanto ne sappiamo alla fine di tutti i file, specialmente i file di testo, c'è un codice esadecimale per EOF o NULLO personaggio. E quando vogliamo scrivere un programma e leggere il contenuto di un file di testo, inviamo la funzione di lettura fino a quando non riceviamo quel codice esadecimale EOF.

La mia domanda: ho scaricato alcuni strumenti per vedere una vista esadecimale di un file di testo. ma non riesco a vedere alcun codice esadecimale per EOF (Fine del file / NULL) o EOT (Fine del testo)


Tabelle di codice ASCII / esadecimale:

enter image description here

Questo è l'output degli strumenti di visualizzazione Hex:

enter image description here


Nota: il mio file di input è un file di testo che il suo contenuto è "Dov'è il codice esadecimale di" EOF "?"

Risposte:


1

Tradizionalmente, in alcuni contesti esiste un "carattere" di fine file - MS-DOS / CMD.EXE utilizza CTRL + Z - Linux usa CTRL + D

CTRL-Z è il codice 26, CTRL-D è il codice 4 nella tabella ASCII.

Questi sono ancora in uso in situazioni quando si utilizza stdin (nel significato come applicato nella programmazione "C" e nella console generale / tty IO).

per esempio.

C:\> copy con myFile.txt
This is text to go into the file. accedere 
 CTRL  +  Z  C: \ & gt; digita myFile.txt
Questo è il testo da inserire nel file.
C: \ & gt; 

La stessa sequenza funziona su Linux con la differenza con cui inizi

$ cat >myFile

e finisci con CTRL + D , poi cat myFile.txt invece di type.

... Se stai programmando, difficilmente vedrai effetti di questi personaggi.
Non sono a conoscenza di alcuna chiamata di funzione che si fermerebbe a questi personaggi.
Leggi la documentazione per il tuo software / libreria - se non c'è una dichiarazione sull'effetto di questi, allora non è probabile che succeda qualcosa di strano.

La fine della linea - Combinazione CR e LF, codice 13 e 10 - è un po 'diversa, tuttavia, può diventare piuttosto confusa se si trasferiscono file TEXT da un sistema a un altro. unix2dos e dos2unix sono comandi di shell disponibili su Linux - per questo scopo.

Esempio di sessione bash:

$ echo -e "First line\n\x04Second line."
First line
Second line.

$ echo -e "First line\n\x04Second line." | od -t x1z
0000000 46 69 72 73 74 20 6c 69 6e 65 0a 04 53 65 63 6f  >First line..Seco<
0000020 6e 64 20 6c 69 6e 65 2e 0a                       >nd line..<
0000031

$ echo -e "First line\n\x04Second line." | grep line
First line
Second line.

$ cat >myFile.txt
Check this out

$ cat myFile.txt
Check this out

$ 

vorresti dare un'occhiata al mio commento sotto la risposta precedente? (sotto tipo risposta). Grazie
Abraham

1

No, EOF non è un personaggio speciale, lol :)

Guarda: http://www.cplusplus.com/reference/cstdio/EOF/

È fondamentalmente una macro:

End-of-File
It is a macro definition of type int that expands into a negative integral constant expression (generally, -1).

It is used as the value returned by several functions in header <cstdio> to indicate that the End-of-File has been reached or to signal some other failure conditions.

It is also used as the value to represent an invalid character. 

In C++, this macro corresponds to the value of char_traits<char>::eof().

Ciò significa che l'API tenta di leggere una riga di file, ottenere -1 e restituisce EOF. Al contrario di EOF, i CR / LF sono caratteri speciali del genere, puoi vederli in HEX Editor se hai delle interruzioni di riga:

'\n' or '0x0A' (10 in decimal) -> This character is called "Line Feed" (LF).
'\r' or '0x0D' (13 in decimal) -> This one is called "Carriage return" (CR).

Oltre ai file, c'è un carattere '\ 0' alla fine dell'array di caratteri in memoria, segna la fine della stringa. Senza di esso, il computer non ha modo di sapere per quanto tempo quel gruppo di personaggi va. Quando si stampa / copia / qualsiasi stringa, continua a stampare / copiare i caratteri finché non trova quel carattere null ... che è quando sa di fermarsi.

Forse intendi questo NULL?


Ho scritto un programma che ha cercato un file di testo per il carattere "A". E se non c'è nessuna "A" nel testo, sposta il file in una directory speciale. Voglio sapere c'è un modo per ingannare il mio programma? per esempio "aggiungendo un codice esadecimale NULL / EOF / EOT nel mezzo del mio testo di input"? Voglio sapere c'è qualche modo per ingannare il programma cambiando solo il file di testo? Supponiamo che non possano installare o modificare nulla nell'host (che il mio programma ha installato in esso.) Grazie
Abraham

Se usi a read() funzione in modalità binaria, o anche modalità di traduzione a capo - e nient'altro è specificato nella documentazione per quella funzione - quindi la mia conclusione è; niente può ingannarlo. Ma per essere più certi del caso ACTUAL per te stesso, usando i tuoi strumenti, devi VERIFICARE questo testando. - la situazione reale dipende interamente da come è scritto il fornitore di strumenti e / o il codice della biblioteca - e lì posso solo indovinare, come chiunque altro.
Hannu

Sì, c'è un modo: il tuo programma può essere smontato: en.wikibooks.org/wiki/X86_Disassembly/Objects_and_Classes
duDE
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.