cmp -lは違いをどのように表示しますか?

cmp -lは違いをどのように表示しますか?

使用中ですがcmp (GNU diffutils) 3.7(「出力バイト数と固有バイト値」)の出力が混乱しています。cmp -l/--verbose

最初に数バイトを除いて、ほぼ同じ2つのファイルがあります。

$ ls -n x*
-rw-rw-r-- 1 1000 1000 345776 Jun 16 10:41 x-6.xz
-rw-rw-r-- 1 1000 1000 345776 Jun 16 10:04 x-9.xz
$ hexdump -C x-6.xz | head -3
00000000  fd 37 7a 58 5a 00 00 04  e6 d6 b4 46 02 00 21 01  |.7zXZ......F..!.|
00000010  16 00 00 00 74 2f e5 a3  e2 1c bb ef ff 5d 00 39  |....t/.......].9|
00000020  18 4a a7 22 04 94 b3 4a  c8 bc d2 00 4b 8c be aa  |.J."...J....K...|
$ hexdump -C x-9.xz | head -3
00000000  fd 37 7a 58 5a 00 00 04  e6 d6 b4 46 02 00 21 01  |.7zXZ......F..!.|
00000010  1c 00 00 00 10 cf 58 cc  e2 1c bb ef ff 5d 00 39  |......X......].9|
00000020  18 4a a7 22 04 94 b3 4a  c8 bc d2 00 4b 8c be aa  |.J."...J....K...|
$ diff <(hexdump -C x-6.xz) <(hexdump -C x-9.xz)
2c2
< 00000010  16 00 00 00 74 2f e5 a3  e2 1c bb ef ff 5d 00 39  |....t/.......].9|
---
> 00000010  1c 00 00 00 10 cf 58 cc  e2 1c bb ef ff 5d 00 39  |......X......].9|
$ 

私を混乱させることは私がする時ですcmp -l

$ cmp -l x-6.xz x-9.xz 
    17  26  34
    21 164  20
    22  57 317
    23 345 130
    24 243 314
$ 

バイト17は、x-6.xzでは26、x-9.xzでは34の値を持つと言われているようです。これは間違っています。実際、バイト16(つまり、0x10)には0x16と0x1c(それぞれ22と28)の値があります。また、cmp はバイト 23 の値が 345 であることを示します。どのようにバイトが255より大きいのですか?出力が何を意味するのか誤解しているようですが、出力man cmpが何なのかは示していないようです。

答え1

cmp 1から始めてオフセットを計算し、バイト値を8進数で表示します。:

17  26  34

hexdumpオフセット17(0から始まるので、出力では0x10)のバイトの値が026 8進数であることを意味します。つまり最初のファイルの10進数22の8進数034、つまり2番目のファイルの10進数28。

関連情報