sábado, 8 de maio de 2010

Convertendo Binário, Octal, Hexadecimal em Inteiro em Java

Essa é outra dica rápida de programação na linguagem Java: como converter uma String representando um número binário, octal ou hexadecimal (e, portanto, que podem conter letras, e não somente números) no inteiro correspondente??

Simples: a classe Integer tem duas sobrecargas do método parseInt: uma recebe somente a String, e supostamente esta String está representando um inteiro em base decimal. A outra recebe a String e a base de cálculo para a conversão. Assim, temos:

Primeira sobrecarga:
int value = Integer.parseInt("16");
System.out.println(value);

Console:
16

Internamente, este método: parseInt(String s) não faz nada além de redirecionar a chamada para a segunda sobrecarga, passando a base 10:

Segunda sobrecarga:
int value = Integer.parseInt("16", 10);
System.out.println(value);

Console:
16

Esta segunda sobrecarga pode receber os valores abaixo como base, usando-os para interpretar a String e fazer a conversão necesária:

2 - Binário
8 - Octal
10 - Decimal
16 - Hexadecimal
27 - base 27 (alguém usa isso??)

Assim, podemos converter binários (usando a base 2), octais (usando a base 8), decimais (usando a base 10) e hexadecimais (usando a base 16), além da não menos esdrúxula base 27.
Exemplos:

Binário:
Integer.parseInt("10", 2); - retorna 2
Integer.parseInt("101", 2); - retorna 5
Integer.parseInt("1100110", 2); - retorna 102

Octal:
Integer.parseInt("10", 8); - retorna 8

Hexadecimal:
Integer.parseInt("f", 16); - retorna 15
Integer.parseInt("a", 16); - retorna 10

Base 27:
Integer.parseInt("Kona", 27); - retorna 411787


  • Outra opção:

Ainda na classe Integer, temos a opção de usar o método valueOf, que tem igualmente duas sobrecargas similares, porém retorna o objeto do tipo Integer de valor correspondente, e não o tipo primitivo. Assim, podemos fazer:

Binário:
Integer i = Integer.valueOf("10", 2);
System.out.println(i.intValue()); - imprime 2

Octal:
Integer i = Integer.valueOf("10", 8);
System.out.println(i.intValue()); - imprime 8

Hexadecimal:
System.out.println(Integer.parseInt("f", 16).intValue());
imprime 15

Uma segunda técnica de conversão numérica e de interconversão entre formatos numéricos pode ser obtida na segunda parte deste artigo, clicando-se aqui!!

Espero que esta dica tenha ajudado!! Qualquer coisa: COMENTEM!!!

Um comentário:

Anônimo disse...

blz dessa forma roda tranquilo
agora eu estou com um problema o seguinte eu quero que o usuário digite um valor qualquer decimal e converta para binário ou seja em vez de declarar o decimal ou o binário dentro do código, eu quero que o usuário digite um valor e o sistema converta, isso é possível?