Сценарии оболочки Linux: шестнадцатеричное число в двоичную строку - PullRequest
6 голосов
/ 07 марта 2012

Я ищу простой способ в скрипте оболочки для преобразования шестнадцатеричного числа в последовательность символов 0 и 1.

Пример:

5F -> "01011111"

Есть ли какая-либо команда или простой методвыполнить это или я должен написать какой-то переключатель для этого?

Ответы [ 5 ]

10 голосов
/ 07 марта 2012
echo "ibase=16; obase=2; 5F" | bc
7 голосов
/ 07 марта 2012

Я использовал команду 'bc' в Linux.(гораздо более сложный калькулятор, чем преобразование!)

echo 'ibase = 16; obase = 2; 5f' |bc

Параметр ibase является входной базой (в данном случае гекса) и обеспечивает выходную базу (двоичную).

Надеюсь, это поможет.

7 голосов
/ 07 марта 2012
$ printf '\x5F' | xxd -b | cut -d' ' -f2
01011111

Или

$ dc -e '16i2o5Fp'
1011111
  • Команда i откроет верхнюю часть стека и будет использовать ее для базы ввода.*Hex цифры должны быть в верхнем регистре во избежание коллизий с командами постоянного тока и не ограничиваются A-F, если входной радиус больше 16.
  • Команда o делает то же самое для выходной базы.
  • Команда p выведет на верхнюю часть стека новую строку послеит.
1 голос
/ 09 марта 2012

Perl printf уже знает двоичный файл:

$ perl -e 'printf "%08b\n", 0x5D'
01011101
0 голосов
/ 12 ноября 2017

Я написал https://github.com/tehmoon/cryptocli для таких видов работ.

Вот пример:

echo -n 5f5f5f5f5f | cryptocli dd -decoders hex -encoders binary_string

Выход:

0101111101011111010111110101111101011111

Противоположное такжеработает.

Примечание: это не идеально, и много работы нужно сделать, но это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...