Материал просмотрен 1,412 раз(а)

Иногда возникают такие ситуации, когда нужно подставить числовое значение в десятичной системе счисления, имея только шестнадцатиричное представление (работа с утилитой 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 (о котором я расскажу позже)