cmp コマンドは、違いのあるバイトのオフセット (10進数) とその値 (8進数) を表示してくれるけど、
欲しいのは、全てが 16 進数の値。
それなら、出力結果を awk で変換するといい。
8 進数 → 16 進数の変換は、先頭に 0 を付けて、16 進数にすれば OK。
$ cmp -l hoge1.bin hoge2.bin | awk '{printf("0x%08X %02X %02X\n", $1, strtonum("0"$2), strtonum("0"$3))}' 0x00000001 26 27 0x00000003 CA CB 0x00000005 A6 A7 0x00000007 D6 D7 0x00000009 6A 6B 0x0000000b CA CB
strtonum は、gawk の拡張機能。
● バイナリ, binary, 比較, 差分, cmp, diff, compare, 16 進数, 10 進数, 8 進数, hex, strtonum
2 件のコメント:
ありがとうございます、非常に参考になりました。
1点だけ補足します。
cmpは不一致のバイト位置が0始まりではなく1始まりですので
0x00000001 26 27
・・・・
になりますね。
コメントありがとうございます!
修正しておきました (汗)
コメントを投稿