![文字檔案中的 EOF ASCII/HEX 代碼](https://rvso.com/image/1417121/%E6%96%87%E5%AD%97%E6%AA%94%E6%A1%88%E4%B8%AD%E7%9A%84%20EOF%20ASCII%2FHEX%20%E4%BB%A3%E7%A2%BC.png)
據了解,在所有文件的末尾,特別是文字文件,都有一個十六進位代碼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?