我对 unix 相当陌生,并且无法理解某些命令的作用。例如,当我xxd在 ppm 文件(即xxd image.ppm)上使用时,我得到如下输出:
00000000: 5036 0a31 3131 2031 3332 0a32 3535 0a55 P6.111 132.255.U
00000010: 6137 5966 3958 6939 566a 3953 6739 5464 a7Yf9Xi9Vj9Sg9Td
00000020: 3b57 643a 5763 3654 6335 5161 334e 5c30 ;Wd:Wc6Tc5Qa3N\0
00000030: 4f5a 3250 5d35 5361 3556 6334 5561 3352 OZ2P]5Sa5Vc4Ua3R
00000040: 5e32 515d 3256 6035 5b64 3856 6136 4a55 ^2Q]2V`5[d8Va6JU
...
...
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释这个输出代表什么吗?
这三个部分是从输入开始的偏移量,以十六进制表示;十六进制数据;和字符数据,如果它们是可打印的。一行 16 个字节,因为它是一个很好的整数,并且非常适合屏幕。
在二进制和文本数据都可能很重要的情况下,经常使用这样的显示。例如tcpdump -X 使用类似的。
在你的第一行:
00000000: 5036 0a31 3131 2031 3332 0a32 3535 0a55 P6.111 132.255.U
Run Code Online (Sandbox Code Playgroud)
偏移量00000000为零,因为这是开始;50, 36, and0a是P, 6, 和换行符等的字符代码。无法打印的字符在右侧列打印为点。
请注意,在某些变体中,中间部分的字节可能在每个组内“反转”。如果程序将输入解释为 little-endian 数字,并按原样显示它们,而不是将单个字节连接起来,就会发生这种情况。
xxd -e正是这样做的。考虑:
$ printf "ABCD" | xxd -e -g2
00000000: 4241 4443 ABCD
Run Code Online (Sandbox Code Playgroud)
41forA和42forB以倒序出现,另外两个也一样。od来自 GNU coreutils 也反转组内的字节。如有疑问,请仔细检查,或旨在获得一对一的分组。(比较例如od -x和od -tx1在这个。)
当然,数据本身的含义可以从 ppm 格式的文档中找到。我的系统有手册页ppm(5)。(die.net上的在线版本已损坏格式。)
从第一行我们可以看出这是一张大小为 111x132 像素的 RGB 图片,每个样本为 8 位。
| 归档时间: |
|
| 查看次数: |
19887 次 |
| 最近记录: |