サイズが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はちゃんと書かないとね!