Esta função Bash deve funcionar para você:
writehex ()
{
local i
while [ "$1" ]; do
for ((i=0; i<${#1}; i+=2))
do
printf "\x${1:i:2}";
done;
shift;
done
}
Implementação alternativa:
writehex ()
{
local arg, i
for arg; do
for ((i=0; i<${#arg}; i+=2))
do
printf "\x${arg:i:2}"
done
done
}
Para testar:
$ writehex abc00001ff | hexdump -C
00000000 ab c0 00 01 ff |.....|
00000005
$ writehex f6050000 ac7e0500 02000800 01000000 | hexdump -C
00000000 f6 05 00 00 ac 7e 05 00 02 00 08 00 01 00 00 00 |.....~..........|
00000010
Outra opção seria usar xxd
.
$ echo hello | xxd
0000000: 6865 6c6c 6f0a
$ echo hello | xxd | xxd -r
hello
Editar:
Além disso, você pode usar a opção -p
para aceitar dados de entrada de forma livre:
$ echo 'f6050000 ac7e0500 02000800 01000000' | xxd -r -p | hexdump -C
00000000 f6 05 00 00 ac 7e 05 00 02 00 08 00 01 00 00 00 |.....~..........|
00000010
Editar 2:
Função modificada acima para manipular vários argumentos de entrada (sequências de dígitos hexadecimais separadas por espaços).