echo '0A'
производит три символа 0 A NL:; xxd -b
затем напечатает эти три символа в двоичном формате. Если вам нужен только один байт со значением 10 (то есть шестнадцатеричный A
), вы можете написать (в bash):
echo -n $'\x0A'
^ ^ ^
| | |
| | +-- `\x` indicates a hexadecimal escape
| +----- Inside a $' string, escapes are interpreted
+------- -n suppresses the trailing newline
Лучшая альтернатива была бы printf '\x0A'
; printf интерпретирует escape-последовательности в строке формата и не выводит неявные символы новой строки. (Это Posix-совместимое решение, которое должно работать на любой Posix-совместимой оболочке.) Еще одна возможность bash есть echo -n -e '\x0A'
; (нестандартный) -e
флаг запрашивает эхо для интерпретации escape-последовательностей.
echo '1' | xxd -b
не выведет эквивалент гекса 50
, потому xxd
что не знает, что 0A
это шестнадцатеричное число, а 1
это не так. Кроме того, код ascii для символа 1
является шестнадцатеричным 31
, а не 50
.
Порядковый номер не влияет на байты. Порядок битов внутри байта является полностью концептуальным, пока байт не передается по последовательной линии, и даже тогда он виден только с помощью осциллографа или чего-то подобного.
50
. Это опечатка. Исправление это сейчас