Eu tenho um contexto onde eu preciso converter binário em hexadecimal e decimal e vice-versa em um script de shell. Alguém pode me sugerir uma ferramenta para isso?
shell-script
binary
arithmetic
Bangi
fonte
fonte
Respostas:
É bastante simples fazer a conversão do binário no bash puro (
echo
eprintf
são embutidos):Binário para decimal
Binário para hexadecimal
Voltando ao binário usando o bash sozinho é um pouco mais complexo, então sugiro que você veja as outras respostas para soluções para isso.
fonte
printf '%x\n' 10
, por exemplo.printf %d
para o bin2dec?$(( ... ))
já dá um resultado decimal,echo
é suficiente.printf '%s\n' foo
vez deecho
por vários motivos (principalmente portabilidade), pelo mesmo motivo, não o uso aqui.echo
). Minha culpa!Supondo que por binário, você quer dizer dados binários como em dados com qualquer valor possível de bytes, incluindo 0 e não números de base 2:
Para converter de binário,
od
(standard),xxd
(vem comvim
) ouperl
'sunpack
vêm à mente.Agora, para converter novamente em binário,
awk
(padrão)xxd -r
ouperl
'spack
:A partir da saída decimal de
od -tu1
ouperl
acima:A partir do hexa
perl
ouxxd -p
acima:fonte
Você pode usar o bc para isso manipulando os parâmetros
ibase
eobase
:O truque é que você precisa ser explícito sobre as bases. Portanto, se seu ibase é 2, se você definir seu obase para 10, ele não fará nada, pois 10 no binário é 2. Portanto, você precisa usar a notação hexadecimal.
Então, binário para decimal seria (observe que obase é A)
Binário para decimal:
Binário para hexadecimal:
Se a 'base de saída'
obase
for alterada primeiro, será mais fácil:fonte
echo 'ibase=2;obase=F;1111
qual deve ser igual a decimal 15, ou seja. F em hex. Ele sai como 10, que está na base 15 (dígitos 0-E). É também mais fácil se você indicar o obase primeiro , por exemplo:echo 'obase=16;ibase=2;1111'|bc
. Sem confusão.ibase
, você deve fornecer informações nessa base, mesmo paraobase
. Então, no seu exemplo seriaecho 'ibase=2;obase=10000;11110001011010'|bc
. Melhor ouvir os conselhos de goldilocks e reverter a ordem - primeiro setobase
, entãoibase
.Se você quer dizer converter números da base 2 para 10 ou 16 e vice-versa,
bc
é a ferramenta padrão para fazer isso, como já mencionado por psarossy .Alguns shells, como o
zsh
suporte interno para conversão de base, fazem parte de seus operadores de expansão aritmética:e assim por diante.
Ambos
ksh93
ezsh
também suportam:Mas observe que, quando expandido,
$binary
terá um prefixo2#
ou16#
(com o qual você pode remover)${binary#*#}
.ksh93
também suporta:converter para binário.
fonte
Para uso binário em hexadecimal: ferramenta xxd no linux e para binário em decimal, você pode usar a ferramenta qalculate.
Para obter ajuda sobre o tipo xxd
xxd --help
ouman xxd
no Linux.fonte
Você pode usar o PHP:
Ou Perl:
Ou POSIX Awk svnpenn / stdlib :
fonte
Conforme mencionado na resposta anterior, você pode executar Binário em Decimal e Hexa Decimal da seguinte maneira no Bash usando echo e printf. Estou apenas adicionando aqui como converter de decimal e hexadecimal para binário usando o Bash puro.
Binário para decimal usando eco
Binário para Hexa-Decimal usando printf
Conversão de decimal inteiro para binário usando apenas Bash
Usando apenas o Bash, se você quiser converter decimal em binário, faça o seguinte:
E copie e cole o seguinte:
E tente de onde você salvou:
Inteiro deve ser adicionado !!
Conversão hexadecimal em binário usando apenas Bash
Da mesma forma, hexadecimal para binário, da seguinte maneira, usando apenas o bash:
Por exemplo:
Hex deve ser passado:
fonte