Якщо у вас це є xxd
, це просто: він може конвертувати в і з шістнадцяткової.
echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181
Я не думаю, що існує розумний (і досить швидкий) спосіб перетворити шістнадцятковий у бінарний за допомогою лише інструментів POSIX. Це можна зробити досить просто в Perl. Наступний сценарій перетворює шістнадцятковий у двійковий, ігноруючи будь-який вхідний символ, який не є шістнадцятковою цифрою. Він скаржиться, якщо рядок введення містить непарну кількість шістнадцяткових цифр.
#!/usr/bin/env perl
$^W = 1;
$c = undef;
while (<>) {
tr/0-9A-Fa-f//cd;
if (defined $c) { warn "Consuming $c"; $_ = $c . $_; $c = undef; }
if (length($_) & 1) { s/(.)$//; $c = $1; }
print pack "H*", $_;
}
if (!eof) { die "$!"; }
if (defined $c) { warn "Odd number of hexadecimal digits"; }
Якщо вам дійсно потрібно дотримуватися POSIX (наприклад, на вбудованому пристрої), я рекомендую використовувати Base64 замість шістнадцяткових. Ви можете використовувати uudecode для декодування Base64. Вхід повинен мати формат заголовка і кінцевий рядок, створений uuencode , він не може бути необробленим Base64.
uudecode <<EOF | nc -l localhost 8181
begin-base64 644 -
AAYwMDAwTkM=
====
EOF