テキストファイル内のEOF ASCII/HEXコード

テキストファイル内のEOF ASCII/HEXコード

私の知る限り、すべてのファイル、特にテキストファイルの末尾には、16進コードがあります。終了またはヌル文字です。プログラムを書いてテキスト ファイルの内容を読み取りたいときは、EOF 16 進コードを受信するまで読み取り関数を送信します。

質問:テキストファイルの16進表示を見るためのツールをダウンロードしました。しかし、16進コードが全く表示されません。終了(ファイルの終わり/NULL) または終了(テキスト終了)


ASCII/16進コード表:

ここに画像の説明を入力してください

これは Hex ビューア ツールの出力です。

ここに画像の説明を入力してください


注: 入力ファイルは、「EOF の 16 進コードはどこにありますか?」という内容のテキスト ファイルです。

答え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でも全く同じシーケンスが動作しますが、違いは

$ cat >myFile

CTRLそして+で終わる場合Dは、cat myFile.txtの代わりにtype.

... ただし、プログラミングを行っている場合、これらの文字の影響はほとんど見られません。
この記事を書いている時点では、これらの文字で停止する関数呼び出しは認識していません。
ソフトウェア/ライブラリのドキュメントを読んでください。これらの影響について何も記載されていない場合は、奇妙なことが起こる可能性は低いでしょう。

ただし、行末 (CR と LF の組み合わせ、コード 13 と 10) は少し異なり、TEXT ファイルをあるシステムから別のシステムに転送する場合、かなり面倒になる可能性があります。Linux unix2dosではdos2unix、この目的のためにシェル コマンドを使用できます。

サンプル bash セッション:

$ echo -e "最初の行\n\x042 行目。"
最初の行
二行目。

$ echo -e "最初の行\n\x042 行目。" | 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\x042 番目の行。" | 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 は特別な文字なので、改行がある場合は HEX エディターで確認できます。

'\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 文字が見つかるまで文字を印刷/コピーし続けます。null 文字が見つかると、停止することがわかります。

おそらくこれは NULL のことでしょうか?

関連情報