- Gerar link
- Outros aplicativos
Postagem em destaque
- Gerar link
- Outros aplicativos
Clique na imagem para ampliar. |
A conversão de base é importante quando precisamos informar notações numéricas menores em nosso código afim facilitar a compreensão e leitura do mesmo. Constantemente necessitamos realizar essas conversões e o uso da calculadora para este caso, pode transformar em uma tarefa extremamente enfadonha; Mas não fique desanimado, pois o Shell Script contém inúmeras ferramentas que irão lhe auxiliar de forma simples e fácil.
bash
Utilizando um recurso nativo do bash (building), através do operador $((...)) com a seguinte sintaxe:
$((base#numero))
Parâmetro | Descrição |
---|---|
base | Representação da qual os números são derivados. |
numero | Valor quantitativo da simbologia da base. |
Representações da base:
Base | Descrição | Simbologia |
---|---|---|
2 | Binário | 01100001 |
8 | Octal | 0141 |
10 | Decimal | 97 |
16 | Hexadecimal | 61 |
O operador converte somente as bases acima para a sua simbologia de base decimal, não havendo suporte a conversões entre si ou vice-versa. Ou seja, só podemos converte a base para sua representação em decimal.
$ echo $((2#01100001))
97
Convertendo hexadecimal para decimal.
$ echo $((16#ff))
255
Note que neste caso especifico não é informado a expressão 0x que precede uma notação hexadecimal que neste caso seria: 0xff. Pois ao informar a base 16 o operador interpreta que o valor informado posteriormente a expressão é um número hexadecimal.
printf
O comando printf do bash é uma variação do printf da linguagem C, porém mantém suas principais características de formato e impressão de argumentos a partir de uma formatação preestabelecida. A grosso modo podemos dizer que é uma alternativa ao comando echo, que imprime informações na tela, porém com muito mais recursos e é através dos seus argumentos de formato que iremos realizar a conversão de base.
$ printf [-v var] formato [argumentos]
Utiliza-se os caracteres de formato para especificar o tipo de valor para o qual os argumentos serão convertidos.
Formato | Descrição |
---|---|
%x | Converte argumento para a base hexadecimal. |
%o | Converte argumento para a base octal. |
%d | Converte argumento para a base decimal. |
%u | Converte argumento para a base decimal sem sinal. |
Convertendo decimal para base octal.
$ printf '%o\n' 97
141
Convertendo decimal para hexadecimal
$ printf '%x\n' 255
ff
Ao contrário do operador do bash utilizado anteriormente, com o printf é possível realizar a conversão entre as bases sem nenhum problema. Para adicionar o prefixo de simbologia da base, basta inserir o caractere # (hashtag) antes do caractere de formato.
Convertendo decimal para hexadecimal, inserindo o prefixo de simbologia.
$ printf '%#x\n' 255
0xff
Convertendo hexadecimal para octal, inserindo o prefixo de simbologia.
$ printf '%#o\n' 0x61
0141
bc
É uma linguagem que suporta números de precisão arbitrária com inter-execução ativa de declarações. Sua sintaxe possui uma semelhança com a linguagem C. Sua biblioteca de matemática padrão está disponível por linha de comando, suportando diversas expressões matemáticas, inclusive a conversão de base; Que que por meio do echo iremos redirecionar nossa expressão para o '|' PIPE.
Parâmetros | Descrição |
---|---|
ibase=<base> | Especifica a base de entrada. |
obase=<base> | Especifica a base de saída. |
valor | Valor a ser convertido. |
Sintaxe:
$ echo 'obase=<base>; ibase=<base>; valor' | bc
Cada parâmetro declarado é separado pelo delimitador ';' indicando o fim da linha de comando.
Convertendo o valor 70 de base decimal para binário.
$ echo 'obase=2; ibase=10; 70' | bc
1000110
Convertendo o valor binário para decimal.
$ echo 'obase=10; ibase=2; 101011' | bc
43
Para realizar as conversões especifique a notação de base em ibase e o seu respectivo valor simbólico. Fique atento na ordem como os parâmetros obase e ibase são declarados, evitando assim surpresas no resultado da expressão; Por padrão o bc lê os valores de base 10, exceto quando utilizamos o ibase.
Ficou claro como o bash oferece excelentes ferramentas e que infelizmente não é possível mencionar todas aqui, porém não deixe de ver uma forma criativa de conversão de base binária para decimal utilizando array indexado. Para visualizar o postagem clique aqui.
- Gerar link
- Outros aplicativos
Comentários
Postar um comentário