Só para ficar registrado...
Formas práticas de conversão:
Hexadecimal => Decimal
$ echo $((16#0000f0050))
983120
$ echo $((0x0000f0050))
983120
$ echo $((16#00050))
80
$ echo $((0x00050))
80
Decimal => Hexadecimal
$ printf "%x\n" 80
50
$ echo 0080 | awk '{ printf "%x\n",$1 }'
50
Só achei essa forma de "Decimal => Hexadecimal" pouco flexivel...
$ printf "%x\n" 080
bash: printf: 080: invalid number
0
$ printf "%x\n" 0x00080
80
Operações com bitwise:
Todos as casas de digitos são consideradas:
$ echo $((0x7531 & 0xffff))
30001
$ echo $((0x7531))
30001
A primeira casa de digito é considerada:
$ echo $((0x7531 & 0xf000))
28672
$ echo $((0x7000 & 0xf000))
28672
$ echo $((0x7000))
28672
A primeira e segunda casas de digitos são consideradas:
$ echo $((0x7531 & 0xff00))
29952
$ echo $((0x7500))
29952
A primeira, segunda e terceira casas de digitos são consideradas:
$ echo $((0x7531 & 0xfff0))
30000
$ echo $((0x7530))
30000
TODO:
bitwise com | e ^
melhorar Decimal => Hexadecimal com printf
On 7/28/06, Felipe Kellermann <[EMAIL PROTECTED]> wrote:
> On Fri, 28 Jul 2006 8:14pm -0300, Reinaldo Carvalho wrote:
>
> > Felipe,
> >
> > > % echo $((0x8001 & 0xff00))
> > > 32768
> > >
> > Não entendi como isso funciona.. pode dar mais exemplos?
>
> Reinaldo,
>
> Desculpas, pensei que o exemplo estava claro. Eu estou fazendo uma
> operação /and/ bitwise, como em C, C++, ou similares. O resultado que eu
> estou obtendo é em decimal. As operações bitwise suportadas pelos shells
> são &, ^, |, e shifts para esquerda ou direita.
>
> Eu enviei uma outra mensagem para esta mesma thread que tem mais exemplos
> sobre isto, talvez eles ajudem. Fale se tiver mais alguma dúvida sobre a
> aplicação dos operadores. Observação: A precedência deles é a mesma que
> em C/C++.
>
>
> > > % echo $((16#8000))
> > > 32768
> > >
> > Perfeito, com certeza a melhor maneira Hexa => Decimal
> > Existe algo semelhante para Decimal => Hexa ?
>
>
> Oh, sim. Dependendo do shell. Em zsh há uma interface matemática simples
> que faz o inverso de base#, que é [#base]. Por exemplo, invertendo o
> exemplo anterior:
>
> % print $(([#16]32768))
> 16#8000
>
>
> Ou no formato C...
>
> % setopt C_BASES
> % print $(([#16]32768))
> 0x8000
>
>
> A opção em outros shells e zsh também, genérica, é usar printf builtin dos
> shells (lembra-se que há o comando printf também). Se tu estiveres usando
> bash, podes usar a opção -v, como nos exemplos que seguem:
>
> $ printf "%x\n" 32768
> 8000
>
> Ou
>
> $ printf -v convertido "%x\n" 32768
>
> Agora convertido tem o valor convertido.
>
> $ printf "Valor convertido: %d\n" $convertido
> Valor convertido: 8000
>
>
> Recomendo o uso de zsh, que tem todo o suporte a conversões de bases tudo
> buildin (base#, base##, [#base], [##base], etc). Boa sorte com os teus
> trabalhos com tc/iproute, este assunto é realmente interessante ;-)
>
>
> Bom final-de-semana,
>
> --
> Felipe Kellermann
>
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: [EMAIL PROTECTED]
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
>
> Links do Yahoo! Grupos
>
>
>
>
>
>
>
>
>
--
Reinaldo Carvalho
Debian Sarge 3.1 - Linux User: #238310
Prodepa - [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/shell-script/
<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html