文字檔案中的 EOF ASCII/HEX 代碼

文字檔案中的 EOF ASCII/HEX 代碼

據了解,在所有文件的末尾,特別是文字文件,都有一個十六進位代碼EOF或者無效的特點。當我們想要編寫程式並讀取文字檔案的內容時,我們發送讀取函數,直到收到 EOF 十六進位程式碼。

我的問題:我下載了一些工具來查看文字檔案的十六進位視圖。但我看不到任何十六進位代碼EOF(檔案結尾/NULL)或環氧乙烷(正文結束)


ASCII/Hex 代碼表:

在此輸入影像描述

這是十六進制檢視器工具的輸出:

在此輸入影像描述


注意:我的輸入檔是一個文字文件,其內容是“Where is hex code of ‘EOF’?”

答案1

傳統上,在某些情況下有一個檔案結束「字元」 - MS-DOS / CMD.EXE 使用CTRL+ Z - Linux 使用CTRL+D

CTRL-Z 是 ASCII 表中的代碼 26,CTRL-D 是代碼 4。

這些在您使用的情況下仍然在使用stdin(在「C」程式設計和通用控制台/tty IO 中應用的含義)。

例如

C:\> 複製 myFile.txt
這是要進入文件的文字。Enter
CTRL+Z
C:\> 輸入 myFile.txt
這是要進入文件的文字。
C:\>

完全相同的序列在 Linux'en 中工作,但與你開始的不同

$貓>我的文件

CTRL並以+結尾D,然後cat myFile.txt代替type.

....如果您正在編程,您幾乎看不到這些字元的任何效果。
在撰寫本文時,我不知道有任何函數呼叫會在這些字元處停止。
閱讀您的軟體/庫的文檔 - 如果沒有關於這些效果的聲明,那麼您不太可能看到任何奇怪的情況發生。

行結尾 - CR 和 LF 組合,代碼 13 和 10 - 有點不同,但如果將 TEXT 檔案從一個系統傳輸到另一個系統,它可能會變得非常混亂。 Linux'en 上unix2dos是否dos2unix有可用的 shell 命令 - 用於此目的。

bash 會話範例:

$ echo -e "第一行\n\x04第二行。"
第一行
第二行。

$ echo -e "第一行\n\x04第二行。" | od -t x1z
0000000 46 69 72 73 74 20 6c 69 6e 65 0a 04 53 65 63 6f >第一行..Seco<
0000020 6e 64 20 6c 69 6e 65 2e 0a >第 行..<
0000031

$ echo -e "第一行\n\x04第二行。" | grep 行
第一行
第二行。

$ cat >myFile.txt
看一下這個

$ cat myFile.txt
看一下這個

$

答案2

不,EOF 不是特殊字符,哈哈:)

看一看:http://www.cplusplus.com/reference/cstdio/EOF/

它基本上是一個宏:

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().

這意味著,API 嘗試讀取一行文件,取得 -1 並傳回 EOF。與 EOF 相比,CR/LF 是特殊字符,如果有一些換行符,您可以在十六進位編輯器中看到它們:

'\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).

除了檔案之外,記憶體中字符數組的末尾有一個'\0'字符,它標誌著字串的結束。如果沒有它,計算機就無法知道這組字元走了多久。當您列印/複製/無論什麼字串時,它都會繼續列印/複製字符,直到找到空字符......那就是它知道停止的時候。

也許你的意思是這個NULL?

相關內容