![テキストファイル内のEOF ASCII/HEXコード](https://rvso.com/image/1417121/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E3%81%AEEOF%20ASCII%2FHEX%E3%82%B3%E3%83%BC%E3%83%89.png)
私の知る限り、すべてのファイル、特にテキストファイルの末尾には、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 のことでしょうか?