使用中ですが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。