2016-09-14 3 views
-3

テキストエディタでオブジェクトファイルを開いたときに表示されるシンボルは何ですか(@、..のような記号は意味がありますか?オブジェクトファイルはバイナリファイルなので、1と0が見えますが、なぜこれらのシンボルが表示されますか?なぜオブジェクトファイル(linuxの.oファイル)がvimのテキストエディタで開かれたときにぎこちないように見えますか?

+1

「バイナリファイル」という用語を誤解しています。これは 'バイナリ表記' – Serge

答えて

3

バイナリファイルにはバイナリデータが含まれているため、テキストエディタが表示する予定のASCIIデータではないためです。それは "非印刷"文字をどのように表示するかはエディタの責任です。

Linuxでは、実際に0と1を表示したい場合は、odを使用して他の形式(8進数、16進数、バイナリ)でファイルをダンプできます。

+0

"あなたのテキストエディタが見たいと思っているASCIIデータ"と同じではありません - "ASCIIデータ"のようなものはありません。それは少し下のビットです。 –

+0

@EmployedRussianテキストエディタがデータに何らかの解釈を適用しないと真剣に主張していますか?それはちょうど "ビット"だった場合、OPの質問は非常に公正です - あなたはそれが0と1を表示することを期待するだろう... – John3136

0

オブジェクトファイルがバイナリファイルなので、私たちは、1と0の

あなたの期待が間違ってで見ることを期待しています。 0と1を表示するには、0と1を表示するツールを使用する必要があります。

このような表示が非常に冗長であるため、これを行う標準的なユーティリティは見つからず、誰も本当に0と1を見たくはありません。プログラマは、よりコンパクトな16進表示を好む。例えば、16進値0xfdは、0と1の次のシーケンスとして表現することができる。1111 1101

注1:正確に同じ0と1のシーケンスで、異なる方法で表現されています。

注2:あなたはビットとして数字を表現することはすぐに手に負えなくなっていることがわかります。0xfffffffd1111 1111 1111 1111 1111 1111 1111 1101

ですが、なぜ私たちは、これらのシンボルを見ていますか?

vimエディタ解釈ASCII文字として0と1のシーケンス。たとえば、「A」のASCIIコードは0x41、または0と1の次のシーケンスは0100 0001です。完全ASCIIテーブルhere

次の行を持っていvimにファイルfoo.txt作成し、このことをよく理解するために:0と1が中に含まれていることが

od -c foo.txt 
od -b foo.txt 
od -tx1 foo.txt 
cat foo.txt 

注:

AAAAaaaa 
BBBBbbbb 

が続いて、このファイルを実行しますファイルに変更されませんが、上記の各コマンドは、これらの0と1を異なる方法でと解釈します。

バイナリファイルに戻ってください。

すべてファイルには一連のバイトが含まれています。これらのバイトは、異なるツールによって異なる解釈が可能です。

「バイナリファイル」と"テキストファイル"の意味は、後者にはバイトしか印刷されず、ASCII文字が関連付けられており、前者には以外のの文字が含まれています(これはバイナリファイルには、印刷可能なASCIIに対応するバイトも含まれています。stringsユーティリティでは、このような印刷可能なバイトシーケンスを「バイナリファイル」から抽出し、「テキスト」として解釈できます。表示可能な文字列としてのバイナリデータhere

1

表示されているシンボルは、C0 Codesのです。であり、非ASCII文字を表します。

.o filesには人間が読めるテキストが含まれていないため、VimがそれらをASCIIとして読み込もうとするとナンセンスに見えます。

あなたが彼らのコンポーネントバイト(のような<00>の代わり^@)としてこれらの文字を確認したい場合は、(も:help display参照):set display+=uhexを試してみてください。

関連する問題