od
não exibe bytes por padrão, mostra palavras em octal. Isso pode não ser intuitivo, mas não se esqueça de od
é um comando muito antigo :-) Vou usar um exemplo um pouco mais simples do que você:
$ echo -en '' | od
0000000 001001
0000002
Como a Intel usa uma arquitetura little-endian , os bytes são interpretados como
00000010 00000001
em binário.
Como os dígitos octais representam 3 bits, podemos agrupar esse número da seguinte forma:
(0)(000)(001)(000)(000)(001)
Portanto, a representação octal desses 2 bytes é:
001001
Para o dia a dia, isso é bastante inútil; talvez no passado fosse útil depurar manualmente os despejos de memória: -)
Seu hello\n
exemplo é:
h = 01101000
e = 01100101
l = 01101100
l = 01101100
o = 01101111
\n= 00001010
É um pouco mais complicado agora, porque os dígitos octal representam 3 bits, mas os bytes são 8 bits; então padding é adicionado :-( O resultado simbólico é:
PehPllP\no
Lembre-se de que cada conjunto de 2 bytes é trocado devido ao endianness. O P é um preenchimento de 2 bits. O resultado em octal é (usando uma barra como separador):
00/01100101/01101000/00/01101100/01101100/00/00001010/01101111
Agora em grupos octal de 3 bits:
000 110 010 101 101 000 000 110 110 001 101 100 000 000 101 001 101 111
Traduzido para dígitos octal:
062550066154005157
Isso corresponde ao seu resultado.
Em conclusão, você provavelmente aprendeu que od
sem opções é pior do que inútil: -)