Иногда возникают такие ситуации, когда нужно подставить числовое значение в десятичной системе счисления, имея только шестнадцатиричное представление (работа с утилитой dd), или требуется вычислить смещение. Или ещё какая-нибудь операция, которая требует преобразования между системами счисления.
Если в Windows-системах для этого есть инженерный калькулятор, который позволяет производить пусть и неудобное, но всё-таки преобразование величин из одной системы счисления в другую, то в Linux/FreeBSD системах для этого есть более удобные способы, о которых я спешу Вам рассказать.
Итак, способ номер раз.
Использование калькулятора bc.
С помощью утилиты bc можно производить много различных вычислений. Запускается он элементарно:
# bc
После чего входит в интерактивный режим. Можно обрабатывать целые файлы с программами, но эта тема выходит за рамки статьи. Простейшие операции:
10+20 <Enter>
вернёт нам результат:
a=10
b=(a*33)
b
c=sqrt(b)
c
Ну это всё лирика. Теперь пришло время поговорить о системах счисления. Задаются как входные, так и выходные величины основания. Для входных служит параметр ibase, для выходных obase.
Проверяем на входной. Т.е. вводим 16-ричное число, на выходе получаем десятичное:
ibase=16
FF
0A
10
FF00
Теперь усложним задачу. На входе (input) будет 16-ричное число, а на выходе (output) будет двоичное:
ibase=16
obase=2
A
5
FF
Вот мы видим, что есть штатная функция для весьма несложного перевода числа из одной системы счисления в другую.
Способ номер два.
Использование встроенной в оболочку интерпретации bash.
В Linux, например, возможно это сделать таким способом:
# echo $((16#15))
ff
#
То есть задать как переменную, где знаком диез (“#”) отделяется основание и входное значение. Кому какой способ удобнее. Причём второй способ можно использовать для подстановки прям в командную строку! Например для работы с тем же dd (о котором я расскажу позже)
Comments: