shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] hexadecimal / traffic control


From: Felipe Kellermann
Subject: Re: [shell-script] hexadecimal / traffic control
Date: Fri, 28 Jul 2006 22:19:28 -0300 (BRT)
User-agent: Pine <http://www.washington.edu/pine/>

yOn Fri, 28 Jul 2006 9:55pm  -0300, Reinaldo Carvalho wrote:

> 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

Olá Reinaldo, obrigado por enviar os exemplos...


> Só achei essa forma de "Decimal => Hexadecimal" pouco flexivel...
> $ printf "%x\n" 080
> bash: printf: 080: invalid number
> 0

O printf builtin do bash tenta fazer a mesma conversão que as operações 
matemáticas da gramática do shell fazem.  Assim ele tenta converter o 
valor 80 em octal, o que não é um número válido.  Use sempre o 0x.  Um 
número começado por 0 é octal:


> $ printf "%x\n" 0x00080
> 80
> 

Aqui tu disse para o bash (shell dummie, use zsh que ele é capaz de ver 
quando ele é ou não um valor octal quando isto é possível  ;-))


> TODO:
> bitwise com | e ^
> melhorar Decimal => Hexadecimal com printf

  $ printf "%x\n" $((0x8010 | 0x0108))
  8118

OBS: Estou usando números fáceis de se fazer a conversão mental.


O ^ é o | exclusivo,

  $ printf "%x\n" $((0x1138 ^ 0x807f))
  9140

1 exclusivo 8 é 9 (faça também printf %x $((2#0001 ^ 2#1000)))
1 exclusivo 0 é 1 (faça também printf %x $((2#0001 ^ 2#0000)))
3 exclusivo 7 é 4 (faça também printf %x $((2#0101 ^ 2#0111)))
8 exclusivo f é 7 (faça também printf %x $((2#1000 ^ 2#1111)))


-- 
Felipe Kellermann


reply via email to

[Prev in Thread] Current Thread [Next in Thread]