Como outros apontaram, isso ocorre porque hexdump -x
trata os arquivos como contendo palavras de 2 bytes. Nos sistemas little endian (quase todos os desktops são), isso significa que os bytes serão trocados antes de serem exibidos. Isso significa que os valores de byte são impressos em pares e que a ordem desses bytes é trocada. Como você tem um número ímpar de bytes, hexdump
adiciona um zero para compor o par final. O zero é então trocado com o 0a
. Este é um comportamento documentado para hexdump
, por isso não está mentindo para você!
Usar hexdump -C
é um comando melhor para obter uma saída formatada que mostre os bytes na ordem em que estão no arquivo. Além disso, o 0a
é uma nova linha e provavelmente foi adicionado silenciosamente ao criar o arquivo ( vim
faz isso por padrão). Por exemplo, echo
sempre adicionará uma nova linha se você não disser não. Em bash
:
echo -e '\xcf\x9e' | hexdump -C
fornecerá o mesmo resultado, mas a supressão da nova linha com -n
dará o que você esperava:
echo -ne '\xcf\x9e' | hexdump -C
Para impedir que vim
adicione a nova linha:
:set noeol
:set binary