xxd -r без xxd
Я использую уменьшенную версию CentOS 5.5 без множества доступных инструментов. Нет xxd, bc или hd. Я не могу установить дополнительные утилиты, к сожалению. У меня есть od, dd, awk и bourne shell (не bash). То, что я пытаюсь сделать, относительно просто в обычной среде. По сути, у меня есть число, скажем, 100 000, и мне нужно сохранить его двоичное представление в файле. Как правило, я бы сделал что-то вроде...
printf '%x' "100000" | xxd -r -p > file.bin
Если вы просмотрите шестнадцатеричный дамп файла, вы правильно увидите число, представленное как 186A0.
Есть ли эквивалент, который я могу объединить, используя ограниченные инструменты, которые у меня есть? Почти все, что я пробовал, хранит значения ascii для цифр.
1 ответ
Вы можете сделать это с помощью комбинации вашего printf, awk и вашей оболочки.
#!/usr/bin/env awk
# ascii_to_bin.awk
{
# Pad out the incoming integer to a full byte
len = length($0);
if ( (len % 2) != 0) {
str = sprintf("0%s", $0);
len = len + 1;
}
else {
str = $0;
}
# Create your escaped echo string
printf("echo -n -e \"");
for(i=1;i<=len;i=i+2) {
printf("\\\\x%s", substr(str, i, 2));
}
printf("\"");
}
Тогда вы можете просто сделать
$ printf '%x' "100000" | awk -f ascii_to_bin.awk | /bin/sh > output.bin
Если вы знаете целевую длину двоичного файла, вы можете просто сделать printf "%0nX"
(n
целевой размер) и удалите (len % 2)
логика.