echo '0A'
produz três caracteres: 0 A NL ; xxd -b
imprimirá esses três caracteres em binário. Se você quisesse apenas o byte único cujo valor é 10 (ou seja, hexadecimal A
), você poderia escrever (no bash):
echo -n $'\x0A'
^ ^ ^
| | |
| | +-- '\x' indicates a hexadecimal escape
| +----- Inside a $' string, escapes are interpreted
+------- -n suppresses the trailing newline
Uma alternativa melhor seria printf '\x0A'
; O printf interpreta as seqüências de escape na string de formato e não gera novas linhas implícitas. (Esta é a solução compatível com Posix, que deve funcionar em qualquer shell compatível com Posix.) Outra possibilidade bash é echo -n -e '\x0A'
; o sinalizador -e
(não padrão) solicita que o echo interprete as seqüências de escape.
Não tenho ideia de por que você esperaria que echo '1' | xxd -b
emitisse o equivalente a hex 50
. Como você espera que xxd
entenda que 0A
é um número hexadecimal e 1
não é? Além disso, por que 50
? (O código ascii para o caractere 1
é hex 31
.)
O endianness não afeta os bytes. A ordem dos bits dentro de um byte é totalmente conceitual até que o byte seja transmitido por uma linha serial e, mesmo assim, ele só é visível com um osciloscópio ou algo semelhante.