vimでバイナリファイルを開くと0s
、代わりにニーモニックが表示されます1s
。私はこれがvimがデフォルトでASCIIモードでファイルを開くからだと思います。私の理解は正しいですか?バイナリファイルのエンコード形式は何ですか? UTF-8ですか?xxd
バイナリファイルが16進数でダンプされることを知っていますVim
。しかし、なぜvimやテキストエディタがバイナリファイルを0s
と1s
。
答え1
すべての最新のオペレーティングシステムでは、すべてのバイナリファイルは一連のバイトまたは8ビットグループとして保存および処理されます。実際、すべてのテキストファイルはこのように保存されます。
ほとんどの場合、テキストエディタ(またはバイナリファイルエディタ)はストレージ単位であるため、バイトを表示するように設計されています。異なる値を含むようにバイナリファイルを編集する場合は、一度に複数のビットを編集するよりも、一度に1バイトを編集する方が便利です。たとえば、データファイルを編集して値を1234から5678に変更した場合、バイトを並べ替えるストリームでいくつかのビットシーケンスを見つけるよりもバイトを検索して04 d2
からORd2 04
に置き換える方がはるかに簡単です。16 2e
2e 16
Vimは、他の多くのテキストエディタと同様に、シングルバイトエンコーディング(通常はVim)を使用するモードでバイナリファイルを開きますlatin1
。文字エンコーディングは、バイナリデータではなくテキストデータ(つまり、人間が理解できることを示すデータ)に使用されるため、どのエンコーディングを使用するかはあまり興味深いものではありません。シングルバイトエンコーディングを使用する目的は、すべてのバイトシーケンスが有効であり、ロードまたは保存時に変更されないことです。
最後に、バイナリファイルもテキストファイルほど明確ではないとしても、一般的にいくつかの構造を持っています。たとえば、ELFファイルは0x7fバイトで始まり、その後に文字が続きますELF
。次に、クラス(32ビットまたは64ビット)、バイト順序、バージョン、およびABIのバイトを含めます。テキストファイルとは異なり、フォーマットに慣れていないと読みやすい形式です。