echo '0A'
produce tres caracteres 0 A NL:; xxd -b
luego imprimirá esos tres caracteres en binario. Si solo desea el byte único cuyo valor es 10 (es decir, hexadecimal A
), podría escribir (en bash):
echo -n $'\x0A'
^ ^ ^
| | |
| | +-- `\x` indicates a hexadecimal escape
| +----- Inside a $' string, escapes are interpreted
+------- -n suppresses the trailing newline
Una mejor alternativa sería printf '\x0A'
; printf interpreta secuencias de escape en la cadena de formato y no genera nuevas líneas implícitas. (Esta es la solución compatible con Posix, que debería funcionar en cualquier shell compatible con Posix.) Otra posibilidad más de bash es echo -n -e '\x0A'
; la -e
bandera (no estándar) le pide a echo que interprete las secuencias de escape.
echo '1' | xxd -b
no generará el equivalente de hexadecimal 50
, porque xxd
no sabe que 0A
es un número hexadecimal y 1
no lo es. Además, el código ascii para el personaje 1
es hexadecimal 31
, no 50
.
Endianness no afecta a los bytes. El orden de los bits dentro de un byte es completamente conceptual hasta que el byte se transmite a través de una línea en serie e incluso entonces solo es visible con un osciloscopio o algo similar.
50
. Es un error tipográfico. Arreglando ahora