Возможно, ваш busybox был построен с помощью апплета base64 , поэтому вы могли бы сделать
busybox base64 <bin >txt
busybox base64 -d <txt >bin
А если нет, то у вас может быть почтенный uuencode и uudecode , которые также могут иметь параметр -m
для кодирования в шестнадцатеричном формате. Например,
echo -n abcABC | busybox uuencode -m - | busybox uudecode -
Перечислите встроенные апплеты с помощью busybox --list
.
POSIXly (и только с использованием общего подмножества, совместимого с busybox
(или, по крайней мере, busybox
, созданным для текущего пакета Debian busybox
):
bin2hex
:
(
экспорт LC_ALL = C
od -An -vtx1 |
tr -s '\ t \ n' '\ n \ n \ n '|
grep.
)
(одно шестнадцатеричное значение в строке)
hex2bin
:
(
экспорт LC_ALL = C
awk '
НАЧАТЬ {
for (i = 0; i <256; i ++)
c [sprintf ("% 02x", i)] = sprintf ("% o", i)
}
NR% 200 == 1 {printf "% s", end "printf '\' '"; end = "' \ '' \ n "}
{printf" \\% s ", c [$ 0]}
END {print end} '|
sh
) {{1} }
Если ваш busybox
, в отличие от Debian, был построен без опции DESKTOP , то -An
и -tx1
] для od
будет недоступен. Вместо этого можно использовать od -b
, который даст однобайтный восьмеричный дамп с восьмеричным смещением. od -b
] - это Unix, но не POSIX, поэтому не будет работать во всех Unix-подобных системах.
bin2hex
будет выглядеть так:
(
export LC_ALL=C
od -b |
awk '
BEGIN{
for(i = 0; i < 256; i++)
hex[sprintf("%03o", i)] = sprintf("%02x", i)
}
NF > 1 {for (i = 2; i<= NF; i++) print hex[$i]}'
)
Опять же, тестировался только с Busybox Debian, я не могу сказать, насколько это зависит от какой-то опции времени компиляции busybox
или другого. Вам нужно будет протестировать целевую систему.
Вот что я придумал (на основе нескольких онлайн-источников и некоторых экспериментов).
hex2bin
): #!/bin/sh
sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' "$1" | xargs printf
bin2hex
): #!/bin/sh
hexdump -C "$1" | cut -b9- | cut -d"|" -f1 | tr -d ' \t\n\r'
./bin2hex binary_file_1 | ./hex2bin - > binary_file_2
diff -s binary_file_1 binary_file_2
Это работает с busybox, но hex2bin, к сожалению, ограничен максимальной длиной аргумента xargs
, поэтому этот метод будет работать только для небольших файлов (менее 32 КиБ в моей настольной системе).