As três partes são o deslocamento desde o início da entrada, em hexadecimal; os dados em hexadecimal; e os dados em caracteres, se forem imprimíveis. 16 bytes para uma linha, já que é um bom número redondo e se encaixa perfeitamente em uma tela.
Uma exibição como essa é muito usada em casos em que os dados binários e textuais podem ser importantes. Por exemplo. tcpdump -X
usa um semelhante.
Na sua primeira linha:
00000000: 5036 0a31 3131 2031 3332 0a32 3535 0a55 P6.111 132.255.U
O offset 00000000
é zero, já que este é o começo; 50
, 36
e 0a
são os códigos de caracteres para P
, 6
e a nova linha e assim por diante. Caracteres não imprimíveis são impressos como pontos na coluna da direita.
Observe que, em algumas variantes, os bytes na seção intermediária podem estar "invertidos" dentro de cada grupo. Isso acontece se o programa interpreta a entrada como números little-endian e os exibe como tal, em vez de como bytes individuais concatenados.
xxd -e
faz exatamente isso. Considere:
$ printf "ABCD" | xxd -e -g2
00000000: 4241 4443 ABCD
41
para A
e 42
para B
aparecem em ordem invertida, bem como os outros dois. od
do GNU coreutils também inverte os bytes dentro dos grupos. Em caso de dúvida, verifique novamente ou tente obter um agrupamento um por um. (compare, por exemplo, od -x
e od -tx1
neste documento.)
Naturalmente, o significado dos dados em si pode ser encontrado na documentação do formato ppm. Meu sistema tem a página man ppm(5)
. (a versão online do no die.net quebrou a formatação.)
A partir dessa primeira linha, podemos dizer que é uma imagem RGB de tamanho 111x132 pixels com 8 bits por amostra.