Files, Binary & Compression

バイナリファイル比較2つのファイルがどのオフセットで違うのかを正確に特定

ファイルAとファイルBを選んで比較を実行すると、両者のバイト単位の差分がすべて表示されます。

バイナリファイル比較

ファイル

ファイルA

ここにファイルをドロップするか、選択してください。

ファイルB

ここにファイルをドロップするか、選択してください。

ファイルはブラウザ内でのみ比較され、アップロードされません。

差分

ファイルを変更した場合は、もう一度比較を実行してください。

ファイルAとファイルBを選んで、比較を実行してください。

チェックサムでは「違う」ことしかわからず、「どこが違うか」まではわかりません。再エンコードしたアセット、パッチを当てたファームウェア、同じバイナリの2つのビルドなど、そんな場面でバイナリファイル比較が役立ちます。両方のファイルをローカルで読み込み、一致・不一致の1つの結論ではなく、差分のあるバイト範囲をオフセットと長さで1つずつ報告します。

これはテキストdiffではありません。あるバイトが挿入・削除されたときにそれを検出して以降を再整列することはせず、A側のオフセットNとB側のオフセットNをそのまま比較します。cmpや多くのhex比較ツールと同じ方針で、行という概念のないバイナリ形式では、このほうが結果を予測しやすくなります。

バイナリファイル比較を使う理由

「違う」ことだけでなく、バイト単位でどこが違うのかまでわかります。

差分ごとに正確なオフセットがわかる

一致・不一致の1つの判定ではなく、差分ブロック一覧が各領域のオフセットと長さを示します。クリックするとhexビューがその位置へ移動し、前後数バイトの文脈も一緒に表示されます。

2つのファイルが並んで表示され、ハイライトされたバイト範囲とそのオフセットが示されている。

サイズの違いは独立した差分になる

ファイルAとファイルBのサイズが異なる場合、長いほうの余分な末尾バイトは、最後の変更箇所に混ぜ込まれず、独立した差分ブロックとして表示されます。

短いファイルと長いファイルが並び、長いファイルの余分な末尾バイトが別枠のブロックとして示されている。

差分を見落とさずに読み進める

01

ファイルAとファイルBを読み込む

どちらかの枠にファイルをドロップするか、ファイルを選択を使います。AとBを入れ替えは即座に両者を交換し、すでに結果が表示されていれば再計算なしで反映されます。サンプルを読み込むを使うと、内容が異なる箇所とサイズが異なる箇所を両方含む小さなペアが読み込まれます。

  • 1ファイルにつき最大512MiBまでです。超えるファイルは読み込む前に拒否されます。
02

比較するを実行する

2つのファイルを選んだだけでは比較は始まりません。比較するボタンを押すか、Ctrl/Cmd+Enterを使ってください。大きなファイルの組み合わせが準備前に動き出すのを防げます。どちらかのファイルを変更すると、それまでの結果は古い状態になります。

  • 差分ブロックが20,000個を超えると、一覧を黙って切り詰めるのではなく比較自体が失敗します。多くの場合、2つのファイルがそもそも別物であることを意味します。
03

差分を1つずつ確認する

差分のみ表示は差分ブロック一覧だけを出し、全体を表示にするとファイル全体をページ送りで見られます。オフセットへ移動には10進数でも0x始まりの16進数でも入力できます。

  • 断片をコピー・断片をダウンロードは、選択した差分ブロックを前後の文脈込みでhex+ASCIIのテキストとして書き出します。

この比較機能でできること

オフセットを基準にした厳密なバイト比較

両方のファイルを同じ1MiB単位で読み込み、同じオフセット同士を1バイトずつ比較します。差分ブロックは連続する差分バイトのランレングスなので、結果は常に一定です。

操作できる差分ブロック一覧

各差分にはオフセット・長さ・種類が付いており、選択するとhexビューがそこへ移動し、その部分を断片として書き出せるようになります。

バイナリ比較ツールとしてのレポート機能

両ファイルのサイズ、差分バイト数とブロック数、各ブロックのオフセットと長さを記した、プレーンテキストのレポートをコピーまたはダウンロードできます。

2通りの閲覧方法

差分のみ表示は差分ブロック間をジャンプし、全体を表示は指定したバイト数ごとにファイル全体をページ送りで読み進められます。

この比較機能がすること・しないこと

挿入・削除の再整列は行わない
このツールはA側のオフセットNとB側のオフセットNをそのまま比較します。どこかで1バイトが挿入されたことを検出して以降を再整列することはありません。cmpやvbindiffと同じ方針です。1バイトの挿入があると、それ以降がすべて差分として表示されますが、これは厳密なオフセット比較における想定どおりの動作であり、不具合ではありません。
1ファイル512MiB、1回の比較で最大20,000ブロックまで
512MiBを超えるファイルは読み込む前に拒否されます。20,000個を超える差分ブロックが発生する場合は、一覧を切り詰めるのではなく比較自体を失敗させます。たいていの場合、2つのファイルが本来比較すべき対象ではないことを意味します。
hexエディタでもファイル形式の判定機能でもない
ここでのバイトは読み取り専用で、その場での編集機能はありません。ファイルの形式をシグネチャから判定するのは別のツールの役割です。バイナリファイル比較は、2つのファイルのどこが違うかを報告することだけに専念しています。
圧縮・暗号化されたファイルはほぼ全体が差分になりがち
圧縮や暗号化は、入力がわずかに変わるだけでも出力の大部分が変わる傾向があります。そのため圧縮済みファイル同士を比較すると、1つの巨大な差分ブロックとして表示されることがよくあります。意味のあるバイト単位の差分を見たい場合は、展開・復号後のファイルを比較してください。

バイナリファイル比較についてのよくある質問

バイナリファイルの差分を表示するにはどうすればいいですか?

ファイルAとファイルBを選んで比較するを押すと、1バイトずつ比較した結果が差分ブロック一覧としてオフセットと長さ付きで表示されます。各ブロックを選ぶと実際のバイト内容も確認できます。

バイナリファイル比較ツールにはどんなものがありますか?

デスクトップではBeyond Compare、WinHex、UltraEditの比較機能、コマンドラインではcmpやvbindiffがよく使われます。このツールは同じ役割をインストール不要のブラウザ上で提供し、差分ブロックの統計やダウンロード可能なレポートも備えています。

cmpとdiff、バイナリファイルの比較にはどちらを使うべきですか?

このツールはcmpと同じ厳密なオフセット基準の方針を取ります。一方のファイルのバイトNをもう一方のバイトNと比較するだけで、再整列は行いません。テキスト向けのdiffは行の挿入・削除を検出しようとしますが、この考え方は任意のバイナリデータにはそのまま当てはまりません。

bsdiffのようなバイナリパッチを作成・適用できますか?

できません。このツールが生成するのは人が読むための差分レポートであり、bsdiffやxdeltaのような実行可能なパッチ形式ではありません。パッチの作成・適用には専用のツールを使ってください。

16進数ファイルをオンラインで無料で比較できるツールはありますか?

あります。このページがそれです。2つのファイルを選んで比較するを押すだけで、すべてブラウザ内で処理が完結し、登録もアップロードも不要です。

解決しませんでしたか?

自分のファイルでバイナリファイル比較を試す

まずはサンプルを読み込んで、内容の変更とサイズの違いがどのように表示されるかを確認してから、自分のファイルでバイナリファイル比較を使ってみてください。

処理はすべてブラウザ内のローカルで完結します。