Что я могу использовать в сценарии оболочки UNIX для преобразования десятичных чисел в шестнадцатеричные? Я думал, что od сделает трюк, но он не понимает, что кормлю его ASCII-представлениями чисел.
printf? Валовой! Используете это сейчас, но что еще доступно?
Ответы:
Если вы хотите отфильтровать целый файл целых чисел, по одному в строке:
источник
ibase=16
. Вы можете прочитать руководство по bc для получения более подробной информации.Пробовали
printf(1)
?Вероятно, есть способы сделать это с помощью встроенных функций во всех оболочках, но это будет менее переносимо. Я не проверял спецификации POSIX sh, чтобы узнать, есть ли у него такие возможности.
источник
bc
является. например, принимая в238862874857408875879219909679752457540
качестве входных данных, printf дает нам «слишком большой результат». метод BC отлично подходит для вещей, больших, чем стандартный int / long / bigintprintf "%X"
bc
доступен не везде (по крайней мере, не в моем встроенном Linux).Шестнадцатеричное в десятичное:
Десятичное в шестнадцатеричное:
источник
источник
-v VAR
это расширение bash. Не упоминается на странице руководства , раскрывается только при вызовеprintf
без аргументовИзвините за мою ошибку, попробуйте это ...
Пример:
источник
printf
иhex
команды недоступны.printf
недоступен?Пытаться:
источник
В
zsh
вы можете делать такие вещи:Пример взят со
zsh
страницы документации об арифметической оценке .Я считаю, что у Bash есть аналогичные возможности.
источник
В моем случае я наткнулся на одну проблему с использованием решения printf:
$ printf "%x" 008 bash: printf: 008: invalid octal number
Самый простой способ - использовать решение с bc , предложенное в посте выше:
$ bc <<< "obase=16; 008" 8
источник
источник
источник
Это не сценарий оболочки, но это инструмент cli, который я использую для преобразования чисел между bin / oct / dec / hex:
источник