echo '0A'
produz três caracteres 0 A NL:; xxd -b
imprimirá esses três caracteres em binário. Se você quiser apenas o byte único cujo valor é 10 (ou seja, hexadecimal A
), você pode escrever (em 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'
; printf interpreta 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.) Ainda outra possibilidade de bash é echo -n -e '\x0A'
; o -e
sinalizador (não padrão) pede que o eco interprete as seqüências de escape.
echo '1' | xxd -b
não produzirá o equivalente a hex 50
, porque xxd
não sabe que 0A
é um número hexadecimal e 1
não é. Além disso, o código ascii para o caractere 1
é hexadecimal 31
, não 50
.
Endianness não afeta bytes. A ordem dos bits dentro de um byte é inteiramente conceitual até que o byte seja transmitido por uma linha serial e mesmo assim seja visível apenas com um osciloscópio ou algo semelhante.
50
. É um erro de digitação. Corrigindo agora #