xxd может использоваться для вывода двоичного представления шестнадцатеричного числа, не строки?

Здесь существует подобное обсуждение, которое упоминает, что добавило значение сна для задержки запуска. Они упоминают, что добавили, что следующее к/etc/rc.local помогло запустить его на начальной загрузке:

sleep 10000
/etc/init.d/zentyal start

но меньшее значение такой как sleep 10 может работать. Кажется, что Ваш сервис может быть /etc/init.d/isc-dhcp-server и нет /etc/init.d/zentyal, но та же идея.

Я не уверен если /etc/rc.local относится к Linux Mint, но другая опция состоит в том, чтобы добавить sleep 10 к самому init.d сценарию как первая команда.

10
04.02.2014, 23:28
3 ответа

echo '0A' производит три символа: NL на 0 А; xxd -b затем распечатает те три символа в двоичном файле. Если Вы хотели просто единственный байт, значение которого равняется 10 (т.е. шестнадцатеричный A), Вы могли записать (в ударе):

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-совместимой оболочкой.) Еще одна возможность удара echo -n -e '\x0A'; (нестандартный) -e флаг просит отзываться эхом для интерпретации escape-последовательностей.

Я понятия не имею, почему Вы ожидали бы echo '1' | xxd -b производить эквивалент шестнадцатеричного числа 50. Как Вы ожидаете xxd понять это 0A шестнадцатеричное число и 1 не? Кроме того, почему 50? (Код ASCII для символа 1 шестнадцатеричное число 31.)

Порядок байтов не влияет на байты. Порядок битов в байте совершенно концептуален, пока байт не передается по последовательной линии, и даже затем это только видимо с осциллографом или чем-то подобным.

8
27.01.2020, 20:01
  • 1
    Извините за 50. Это - опечатка. При фиксации его теперь –  TheMeaningfulEngineer 04.02.2014, 23:27

Да, можно использовать xxd чтобы сделать это, но Вам не может понравиться формат ввода. От Вашего примера 0x0a является шестнадцатеричным значением новой строки ASCII. Можно создать файл с единственной новой строкой в нем, затем использовать xxd создать список:

$ xxd one_line_file
0000000: 0a                                       .

Можно получить единственную новую строку из xxd от того вывода, если Вы даете ему надлежащие флаги:

$ echo "0000000: 0a" | xxd -r > another_one_line_file
$ xxd another_one_line_file
0000000: 0a 

xxd имеет довольно хороший выходной формат, я не думаю, что это было бы слишком обременительно, чтобы создать Ваши пакеты с помощью текстового редактора, затем использовать xxd -r перейти к двоичному файлу..

2
27.01.2020, 20:01

Если вы хотите, чтобы двоичный вывод для строки шестнадцатеричных цифр, XXD -R -P . E.g.

 $ echo '0A0B0C0D' | xxd -r -p | xxd -b
 0000000: 00001010 00001011 00001100 00001101                    ....

Converts 0A0B0C0D в четыре байта двоичного (первый звонок к XXD), а затем преобразует его обратно для печати (второй вызов). Вы говорите, что хотите двоичного вывода, но примеры, которые вы пытаетесь, - это печатное представление.

Я ничего не знаю, где целенастинцы неоднозначны на уровне нехватки, так как вы подразумеваете во втором примере. Преобразование в XXD - это чистый байт за раз, не предполагающий, что они представляют какое-либо конкретное многобайтовое число.

7
27.01.2020, 20:01

Теги

Похожие вопросы