Все решения кажутся трудными для запоминания или слишком сложными, я считаю, что printf
самое короткое:
$ printf '%x\n' 256
100
[править]
Но, как отмечено в комментариях, это не то, чего хочет автор, поэтому, если быть честным, ниже приведен полный ответ.
... для использования выше для вывода фактического потока двоичных данных:
printf '%x\n' $(cat /dev/urandom | head -c 5 | od -An -vtu1)
что он делает:
- printf '% x \ n' .... - печатает последовательность целых чисел, т.е.
printf '%x,' 1 2 3
, напечатает 1,2,3,
- $ (...) - это способ получить выходные данные какой-либо команды оболочки и обработать ее
cat /dev/urandom
- выводит случайные двоичные данные
head -c 5
- ограничивает двоичные данные 5 байтами
od -An -vtu1
- восьмеричная команда дампа, преобразует двоичный код в десятичный
в качестве тестового примера («a» - это 61 гекс, «p» - это 70 гекс, ...):
$ printf '%x\n' $(echo "apple" | head -c 5 | od -An -vtu1)
61
70
70
6c
65
или для проверки отдельных двоичных байтов, на входе давайте дадим 61 десятичное число (символ '=') для получения двоичных данных (формат '\\x%x'
делает это), указанная выше команда будет правильно выводить 3d (десятичное число 61):
$printf '%x\n' $(echo -ne "$(printf '\\x%x' 61)" | head -c 5 | od -An -vtu1)
3d