画像に猫を使用すると何が生成されますか?


9

次のようなファイルを作成するとします。

touch myFile

vimなどでテキストを入力し、それを使用cat myFileしてコンテンツをターミナルに吐き出します。

さて、画像に猫を使用するとどうなりますか?いう、

cat myPNG.png

ゴミがたまにあります。catコマンドが何をしようとしているのか、そしてすべての「ゴミ」がどこから来ているのかを考えさせられました。ちょっと興味があるんだけど。

回答:


22

ファイルが最下位レベルでどのように機能するかを説明すると役立つ場合があります。

ファイルは、長さが0以上のバイトストリームです。1バイトは8ビットです。8ビットには256の組み合わせがあるため、1バイトは0から255までの任意の数になります。したがって、すべてのファイルは、その最低レベルでは、0から255までの数の大きな塊になります。

数値の「意味」を決めるのは、プログラムとユーザー次第です。テキストを保存する場合は、コードとして数値を使用することをお勧めします。各数値には文字が割り当てられます。それがASCIIとUnicodeが行うことです。テキストを表示したい場合は、デバイスを作成するか、これらの数値を取得して対応するASCII / Unicodeコードのようなビットマップを表示できるプログラムを作成することをお勧めします。これがターミナルとターミナルエミュレータが行うことです。

もちろん、グラフィックスの場合、ピクセルとその色を表す数値が必要になるでしょう。次に、ファイルを調べ、すべてのバイトを読み取り、それに応じて画像をレンダリングするプログラムが必要です。端末エミュレータは、バイトがASCII / Unicode番号であることを期待しており、同じバイトのチャンク(またはファイル)に対して異なる動作をします。


素晴らしい説明!あなたが最低レベルに下がったのはうれしいです。
Qcom、2011

2
@BOSS少し定義を入れます。ビットは、バイナリDIgit、または1または0になる可能性のある数値です。1ビットには2つの可能性、つまり2 ^ 1 = 2があります。2ビットは4つの組み合わせ、つまり2×2 = 4を持つことができます。より正確には、2桁で2²= 4です。8バイナリDIgitまたはビットは、2 ^ 8 = 2×2×2×2×2×2×2×2 = 256の可能な組み合わせを持つことができます。
ペンギン359

2
小さなnitpick / pedantry:バイトは任意のサイズです。8ビット幅ではない場合があります。「オクテット」が好ましい用語です。
クリスダウン

9

Catは、入力ファイルの内容を標準出力(この場合はテキストデバイス:端末ウィンドウ)にダンプします。画像はバイナリデータで構成されているため、ASCIIテキストであるかのように解釈された生のバイナリデータが表示されます。たとえば、値65のバイトは大文字A、66は大文字Bなどとして表示されます。画像ファイルを正しく解釈できるアプリケーションでファイルを開くと、ファイルのバイナリコンテンツが表示されます。画像として。


うんいいね。答えてくれてありがとう。あなたは「テキストモード」について言及しています。標準端末には他のモードはありますか?または、そのファイルタイプを適切にレンダリングできるアプリケーションを介して、あなたが言ったようにそれを解釈する唯一の他の方法はありますか?
Qcom、2011

4
@ボス、いや、ゴルドコは端末がテキストデバイスだと言っているつもりだったと思う。の本来の目的catは、のようにファイルをまとめるcat filea fileb > filecことです。(この例のように)端末を経由しない場合は、ファイルがテキストかバイナリかは関係ありません。UNIXの世界では、バイナリファイルとテキストファイルは同じように格納され、テキストファイルだけが多少制限されたバイトのセットを含んでいます。catの一般的な使用法は、ファイル名をパラメーターとして使用せず、標準入力からの入力を受け入れるコマンドにファイルの内容を送信することです。
asoundmove 2011

@BOSSは、ファイルがバイナリではなくテキストファイルであることを示していますが、これは、ファイルのバイナリコンテンツをテキストとして解釈できることを意味するだけです。以前は単純でしたが、ファイルはASCIIであるかそうでなかったかのどちらかでした。現在、ファイルは、ASCII、UTF8、UTF16など、さまざまなテキスト形式である可能性があります。ハードドライブでは、すべてバイナリ形式です。
asoundmove 2011

@asoundmove:正解です。あいまいな用語「テキストモード」ではなく、テキストデバイスと言ったほうがいいでしょう。返信を編集しました。
ジャグラー

私はたった今ビットマップで猫を使いました、そしてそれはアスキー記号だけでなくユニコード文字( "ڣ"や "漥"のような)もターミナルに出力しました。これはなぜですか?
マグナス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.