Macでバイナリファイルの内容比較


サイズが1バイトだけ異なる2つのバイナリファイルの違いを知りたかったので、以下を行いました。テキストファイルだったら単純にdiffとかvimdiffとかでできるんだけど、それに近いことをバイナリファイルで確認したいなと。

自分の環境はMacですが、Windowsでもほぼ同じことができそうです。と言うかWindowsならバイナリファイル同士の比較のソフトがありそうですね。

まず最初にcmpコマンドで二つのファイルを比較。これはdiffのバイナリバージョンで、何バイト目が異なっているのかを教えてくれます。


$ cmp yumin.z yumin2.z
yumin.z yumin2.z differ: char 5578418, line 21732

ふむふむ、5578418バイト目ね。これで異なっている位置が分かりました。
今度はバイナリエディタでこれらのファイルを開いてみましょう。

Hex Fiend
https://apps.apple.com/jp/app/hex-fiend/id1342896380
上記はMacのApp Storeですが、Windows用もググれば出てきます。これを自分のマシンにインストールします。

で、今度はバイナリファイルをHex Fiendで開きます。開いたら、メニューの
「Edit」→「Jump to Offset ⌘L」で出てくる窓に、上記の異なるバイト5578418を入力して「Move」あるいはエンターを押すと、画面はその箇所に移動します。

もう一つのファイルに対しても同じことを行い、メニューの「Window」から異なる方のファイルを指定したり、⌘+F1または⌘+fn+F1で画面を切り替えたりすると、値を比較できます。

この時、2つのウィンドウのサイズや位置をぴったり合わせておくと、⌘+F1または⌘+fn+F1での比較が楽そうですね。

他にもMacで良さそうなツールがあったらぜひ教えてください。

これのおかげで、Gitが改行コードをLF(0A)からCRLF(0D0A)自動変換してるせいで、(今回は1バイトの)違いが生じてしまったのに気づけました。.gitattributesはちゃんと書かないとね!