
$ echo "hello" | od
0000000 062550 066154 005157
0000006
Eu sei que a primeira coluna representa o deslocamento de bytes. Mas não vejo como os outros números são formados. De acordo com man
o acima exposto, devem ser "bytes octais". No entanto, a opção -b
também deve "selecionar bytes octais" e imprime algo diferente:
$echo "hello" | od -b
0000000 150 145 154 154 157 012
0000006
EDIT: A propósito, isso é o que eu esperaria que aparecesse, ou seja, os valores ascii de todos os caracteres em 'hello\n' como o que eu esperaria ser chamado de "bytes octais".
Responder1
od
não mostra bytes por padrão, mostra palavras em octal. Isto pode não ser muito intuitivo, mas não se esqueça od
que é umamuitocomando antigo :-) Usarei um exemplo um pouco mais simples do que você:
$ echo -en '\01\02' | od
0000000 001001
0000002
Como a Intel usa umpequeno endianarquitetura, os bytes \01\02
são interpretados como 00000010 00000001
em binário.
Como cada dígito octal representa 3 bits, podemos agrupar esse número assim:
(0)(000)(001)(000)(000)(001)
Portanto, a representação octal desses 2 bytes é:
001001
Para o uso diário, isso é bastante inútil; talvez antigamente fosse útil para depurar manualmente despejos de memória :-)
Seu hello\n
exemplo é:
h = 01101000
e = 01100101
l = 01101100
l = 01101100
o = 01101111
\n= 00001010
Agora é um pouco mais complicado, porque os dígitos octais representam 3 bits, mas os bytes são 8 bits; então o preenchimento é adicionado :-( O resultado simbolicamente é:
PehPllP\no
Lembre-se de que cada conjunto de 2 bytes é trocado devido ao endianness. OPé 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 octais de 3 bits:
000 110 010 101 101 000 000 110 110 001 101 100 000 000 101 001 101 111
Traduzido em dígitos octais:
062550066154005157
Isso corresponde ao seu resultado.
Concluindo, você provavelmente aprendeu que od
sem opções é pior que inútil :-)