Si es así xxd
, es fácil: puede convertir ay desde hexadecimal.
echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181
No creo que haya una forma razonable (y razonablemente rápida) de convertir hexadecimal a binario usando solo herramientas POSIX. Se puede hacer bastante fácil en Perl. El siguiente script convierte hexadecimal a binario, ignorando cualquier carácter de entrada que no sea un dígito hexadecimal. Se queja si una línea de entrada contiene un número impar de dígitos hexadecimales.
#!/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"; }
Si realmente necesita apegarse a POSIX (por ejemplo, en un dispositivo integrado), le recomiendo usar Base64 en lugar de hexadecimal. Puede usar uudecode para decodificar Base64. La entrada debe tener el formato del encabezado y la línea final producida por uuencode , no puede ser Base64 sin formato .
uudecode <<EOF | nc -l localhost 8181
begin-base64 644 -
AAYwMDAwTkM=
====
EOF