web-dev-qa-db-ja.com

16進エディタはなぜバイナリエディタと呼ばれるのですか。

16進数と2進数は2つの異なるベースです。私の知る限りでは、Hexは単なる使いやすくて便利なバージョンのバイナリです。

しかし、16進エディタはバイナリエディタだとよく聞きます。 Googleで「バイナリエディタ」を検索すると、16進エディタになります。

82
Joseph A.

バイナリエディタは、ファイルをバイナリファイルとして編集します。

バイナリファイル - Wikipedia

バイナリファイルは、テキストファイルではないコンピュータファイルです。 「バイナリファイル」という用語はしばしば「非テキストファイル」を意味する用語として使用され[通常]一連のバイトとして考えられています。 ...バイナリファイルには通常、テキスト文字以外のものとして解釈されることを意図したバイトが含まれています。

16進エディタは、データが 16進数で表されるバイナリエディタの一種です。 。

16進エディタ - Wikipedia

16進エディタ(またはバイナリファイルエディタまたはバイトエデ​​ィタ)は、コンピュータプログラムの一種です。コンピュータファイルを構成する基本的なバイナリデータの操作を可能にします。 'hex'という名前は、 'hexadecimal'(16を基数とする数字の標準表現)に由来します。

185
Steven

用語は難しいです。人によって物事の種類が異なります。

この場合、 "hex editor"のhexは、各バイトの値の従来の人間が読める形式の表現を指していますが、「バイナリエディタ」のバイナリは、実際にはバイトレイヤーでファイルを編集している(およびコンピュータがバイトをバイナリで格納している)という概念を表します。レベルのテキストエンコーディングなど。同じ理由で、高水準のテキスト形式では表現できないファイルは「バイナリファイル」または「バイナリ」と呼ばれます。

どちらも技術的に正しくありません。彼らは、さまざまな角度から命名の問題に直面しています。個人的な話では、しかし、私は "バイナリエディタ"がバランスを混乱させることに同意する傾向があります。

バイナリエディタ表示(バイナリ)

00000000 | 11111011 11111011 11111011 11111011 11110101 11111011 11111011 11111011
00001000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
00010000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
00011000 | 11110101 11111011 11111011 11111011 11111011 11111011 11111011 11111011
00100000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
00101000 | 11111011 11111011 11101111 11111011 11111011 11111011 11111011 11111011
00110000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
00111000 | 11111011 11111011 11111011 11101111 11111011 11111011 11111011 11111011
01000000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
01001000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011
01010000 | 11101111 11111011 11111011 11111011 11111011 11111011 11111011 11111011
01011000 | 11101111 11111011 11111011 11111011 11111011 11111011 11111011 11111011
01100000 | 11111011 11111011 11111011 11111011 11111011 11101111 11111011 11111011
01101000 | 11111011 11111011 11111011 11111011 11111011 11111011 11111011 11111011

バイナリエディタ表示(16進数)

00 | fb fb fb fb f5 fb fb fb fb fb fb fb fb fb fb fb
10 | fb fb fb fb fb fb fb fb f5 fb fb fb fb fb fb fb 
20 | fb fb fb fb fb fb fb fb fb fb ef fb fb fb fb fb 
30 | fb fb fb fb fb fb fb fb fb fb fb ef fb fb fb fb 
40 | fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb 
50 | ef fb fb fb fb fb fb fb ef fb fb fb fb fb fb fb 
60 | fb fb fb fb fb ef fb fb fb fb fb fb fb fb fb fb

バイナリエディタを使用すると、バイナリでバイトを処理できるはずですが、ご覧のように基数2は小さすぎて数字をコンパクトにすることができません。

生のバイナリ、ベース2ではない

一般的に言って、バイナリエディタの "binary"は基数2を参照していません。実際には "の反対語"です。 テキストエディタ "#:。
違いは、テキストエディタはテキストを表示するように設計されているため、非印刷文字、改行、制御文字、無効なutf-8コード単位などを安全に処理する必要がないことです。
ファイルを開いてすぐに保存するという単なる行為で、ファイルを変更することができます(エディタの内部変換、失敗のため)。

一方、バイナリエディタはデータに意味を持たせようとせず、ユーザに安全にそれをバイト/ビット/ワードのストリームとして処理させます。

16進エディタ

完璧なバイナリエディタはあらゆる可能なバイナリフォーマットを知っていてそれを編集させるでしょうが、誰でもそれ自身のバイナリフォーマットを作ることができそしてそれらが頻繁に変わるので、すべてのフォーマットをサポートしようとするのは無駄です。
編集者ができる最善のことは、バイト自体を表示することです。すでに説明したように、基数16の16進数の特性は非常に便利です。

また、経験豊富なユーザーは、読み取り時にビンを16進数に精神的に変換できます。
16進数で書かれたバイトからビットを設定/取得するのは、binで書かれたバイトよりもまったく絶対に努力は必要ありません。
正直に言うと、バイナリよりも16進数の方が読みやすいことがわかりました。

56
Margaret Bloom

16進エディタはなぜバイナリエディタと呼ばれるのですか。

まとめ:

16進数形式でバイナリコンテンツを表示し、これらの16進数を変更できるようにすることで、16進エディタを使用してバイナリファイルを直接編集します。

ノート:

  • Hex Editorsでは、データを解釈しようとする他のプログラムの代わりに、ファイルの生データの内容を編集できます。

  • バイナリエディタまたはバイトエデ​​ィタとも呼ばれる16進エディタ。

  • バイナリエディタやバイトエデ​​ィタと呼んでも、エディタは16進数を変更し、バイナリ数やバイト数を変更しないため、実際には正しくありません(もちろん、ファイルが保存されている場合、基礎となるバイナリ数とバイト数も変わります)。

バイナリで16進数を編集するのはなぜですか?

データを16進形式で表示し、16進値を変更することによって、バイナリファイルを直接表示または編集/変更する方が簡単です。

  • 2進数を表現する便利な方法の1つは、16進数を使用することです。

  • 歴史的にコンピュータはアセンブリ言語でプログラムされていました、そこでコードはプロセッサ命令とメタステートメント(ディレクティブ、疑似命令と疑似命令として様々に知られている)、コメントとデータを使って書かれました。

    • コードはアセンブラを使ってバイナリに変換されます。その後、バイナリコードをプロセスにロードして実行できます。

    • ソースコードがないと、プログラムをバイナリではなく16進数で表示するエディタを使用してプログラムを直接変更する方が簡単です。

  • バイナリコードは、16進数に変換すると人間が読みやすくなります。

    たとえば、どの番号のペアが暗記したり他の人に読みやすくなったりしますか。

    10110000 01100001
    

    または

    B0 61
    
  • 各16進数は4つの2進数(ビット)を表します。 1桁の16進数はニブルを表します。これは、オクテットまたはバイト(8ビット)の半分です。

    例えば、バイト値は0から255(10進数)までの範囲で指定できますが、00からFFまでの範囲の2つの16進数として表現すると便利です。

  • 16進数もコンピューターのメモリアドレスを表すのに一般的に使用されます。

15
DavidPostill

いくつかのプログラミング言語とオペレーティングシステムの規則に従って、2種類のファイルがあります。

  • 一連のテキスト行からなるテキストファイル。各行は一連の印刷可能文字(一部の制御文字を含む)で構成され、行末で終了します。
  • テキストファイルで禁止されているnullバイトを含む任意のバイトの組を含むバイナリファイル。

テキストエディタはテキストファイルを開くことができますが、バイナリエディタは処理するファイルの種類に制限はありません。

バイナリエディタは16進数でデータを表現し入力することができるので便利です(ASCII文字を表示したり置き換えたりすることもできます)。純粋なバイナリでデータを表示するだけではデータが読みにくくなります。

一般的なバイナリエディタは HexEdit という名前です。

enter image description here

それは正しくそれ自身をバイナリエディタとヘキサエディタの両方と見なします。

enter image description here

データを16進数で表示せずにテキストのみを表示するというオプションもあります。

enter image description here

9
jlliagre

人々が16進数を使用しているとき、彼らは通常2進法で考えていて、省略表記として16進数を使っています。

16は2の累乗です。8も2の累乗です。そのため、16と8がバイナリの簡略表記に使用されています。 2進数と2のべき乗の基数間の手動変換は簡単です。ターゲットベースで示されるサイズにビットをまとめて、対応する数字を使用するだけです。

8進数の8進数は、初期の多くのコンピュータで人気があったため、Unixにod 8進ダンプコマンドがあります。各8進数字は一度に3ビットを表します。しかし、8ビットバイトベースのマシンにとっては不便でした。

16進数(略して16進数の16進数)は、1桁あたり4ビットを表します。これは最近よく使われる表現です。

5
infixed

今日の大部分のコンピュータ上のファイルは8ビットバイトです。これは通常、ファイルを直接編集するときに使用する抽象概念です。

もちろん、実際には個々のデータを編集することはありますが、それほど多くはありません。ビット7の設定などの一般的なビットレベルの操作は、とにかく16進数で簡単に行えます - 1000 0000base2 = 80base16したがって、16進値が80未満の場合base2 ビット7は明確で8を追加base16 それを設定します。

ヘックスがこの種の活動とより強く関連している他の理由:

  • 既知の値を視覚的にスキャンすると、16進値は認識しやすくなります。たとえば、20base16 = 32これはASCIIスペースですが、同じ値0010 0000base2 他のダンプされた値の洪水の中でそのように認識するのはそれほど簡単ではありません。

  • あなたが実際にこれを定期的に使用する必要があった古いシステムはスクリーンスペースが限られていたかもしれません(例えば40カラム)。 Apple IIe ROMモニターはその良い例です。40カラムの内蔵ビデオに16進数でメモリをダンプできます。80x 24の画面で値をバイナリに拡張すると、すぐに部屋の空き容量が不足します。これらの古いシステムでは、入力されたASCIIを正しい値に変換するためのルーチンを書くのも簡単です。 4KのRAMが大量のメモリと見なされ、システムに必要なROM容量がある場合は重要です。

  • 「16進数」という単語は、聞こえやすく、短く、入力が簡単です。

5
LawrenceC

これは、コンピュータが情報を保存する方法を表します。

基本的なレベルでは、コンピュータはデータを表すために01を使います。これらはビットと呼ばれます。一緒にグループ化された8ビットは1バイトです。 16進数は16進数です。つまり、16文字(0-9A-F)です。文字を格納するには8ビットまたは1バイトかかります。

したがって、16進数の13(10進数の19)は、2進数の0001 0011と同じです。バイナリよりも16進数の方が読みやすいです。

3
Burgi

コンパイルされて実行可能なファイル(Windowsなどのsomefile.exeなど)は、プロセッサによって直接実行されるバイナリレベルで正しいマシンレベルのコードにコンパイルされるため、「バイナリ」と呼ばれることがあります。

それで、あなたはバイナリを編集しています。 16進数は人間にとって便利なので、たまたま16進数で表示されます。

2
Mike Gillis

私が知っている最も初期のバイナリエディタも逆アセンブラでした。つまり、編集機能は、実行可能バイナリファイルの逆アセンブルとパッチ適用の副産物でした。

そのようなアプリケーションの良い例はHiewです。

アセンブルコード(アセンブラ命令)は、しばしば16進数の文字列として表現されます。これが現代の混乱が生じるところだと思います。人々は、彼らが何を扱っているのか、わからないだけです。

2
AnrDaemon

私はあなたの質問に文字通り答えるつもりです。

まず、少し説明を加えます。あなたは、もちろん、16進エディタを意味します。 16進数610進数を意味します10を意味するので、16進数16を意味します。 Bi2を意味します。すでに説明したように、これらは基数16と基数2の2つの異なる基数です。つまり、16進数を定義するには16個のプレースホルダ要素が、2進数を定義するには2個の要素が必要です。

あなたは言いました、

If you actually search for "binary editor" on Google, you get hex editors.

そして今、あなたの質問のために、

Why is that? 

これは文字通りの部分です。 Googleは、ほとんどの人が検索の結果として満足のいく結果だと考えているものを返します。彼らの機械学習アルゴリズムは、文字列 "editor"のコンテキスト内で文字列 "hexadecimal"と "hex"を "binary"と関連付けます。 「バイナリ」「エディタ」を検索した後、ほとんどのユーザは「16進」「エディタ」に満足していたので、それが私たちの得ていることです。それ以外の意味はありません。

What is the connection?

文字通り、Googleは何の意味も返さないので、何もありません。 Googleはバイナリと16進数の違いを知りません、それは人々が彼らの検索エンジンをどのように使うかを表にすることができるだけです。

あなたが16進数と2進数の間の本当の接続を求めているなら、上の私の説明に戻ると、1つの16進数要素は16の可能性または4ビットを符号化します8ビットの情報を1バイトにエンコードするには、2つの16進数要素または8つの2進数要素が必要です。そのため、バイナリエディタまたは16進エディタは、まったく異なるビューで同じデータを表すため、互換的に使用される可能性があります。

1
r3mnant

それらはあなたが個々のビットを変えることを可能にするのでそれらは "バイナリ"と呼ばれます。

UIは通常、デフォルトでは16進数で機能します。 ffffe0007d13e6501111111111111111111000000000000001111101000100111110011001010000よりも画面上のスペースが少なくて済みます。 (これはデバッグの問題からの実際のアドレスであり、作り上げた例ではありません。)16進コードのASCIIやUnicode文字のようなものを "見る"方が簡単です。

あなたが本当にそれらをしたい場合しかし、それらのほとんどはあなたにバイナリビットを表示するように切り替わります。

(なぜ私たちは車道を走るが、私道を走るのですか?それは単なる言葉です。英語はしばしば奇妙です。)

1
Jamie Hanrahan