String Binária para int Hexadecimal

Por gentileza preciso de idéia para solucionar o seguinte problema:
Meu programa possuí um método que retorna uma String binária quando eu vou converte-la para int (lembrando que um int possuí 32 bits), pois devo fazer uma soma com outro int e depois na próxima linha de código faço um | (ou bit a bit).
Bom, nessa linha que faz a conversão da string binária para int ocasiona um problema de large number quando essa mesma string possuí os 32 bits completos digamos que o bit MSB esteja com valor 1 e outros com 0’s.
A minha idéia seria converter essa string binária em hexadecimal e passar para a var int só que será um trabalho árduo pq java não tem esse método até onde eu sei fiz a pesquisa e não encontrei. Pensei em trabalhar com BigInteger só que vou obter o mesmo problema pq devo ter uma String para trabalhar com BigInteger e converter para hexa.
Outra idéia que tive, mas não funciona também é contar as posições da string e fazer grupos de 4 em 4 para converter para hexa e armazenar em um vetor de char [4]. Só que cheguei no mesmo problema!
Enfim, o problema principal é de large number e acaso eu consigo pegar essa string e colocar o valor hexa dentro do int o problema acredito que será resolvido. Pois já trabalho assim no meu programinha com uma tabela de expansão de chaves cujo faço as constantes int p = 0xb7e15163;

Desde já agradeço pela ajuda.

Faz como você faria no papel… transforma para decimal e na sequência para hexa…

Já tentou usar um long?

long valor = (long)(seuInt & 0xFFFFFFFF);

Isso faz com que o bit mais significativo seja entendido como bit de número, não de sinal.

Um pouco do Javadoc não faz mal a ninguém… Veja o javadoc de parseInt.

String s = "01001010";
int i = Integer.parseInt (s, 2);
String x = String.format ("%08X", i);
System.out.println (x);

Para transformar em binário para hexa, não é necessário converter o número para decimal. Basta trabalhar de 4 em 4 bits. Onde:
0000 - 0 0001 - 1 0010 - 2 0011 - 3
0100 - 4 0101 - 5 0110 - 6 0111 - 7
1000 - 8 1001 - 9 1010 - A 1011 - B
1100 - C 1101 - D 1110 - E 1111 - F

O algoritmo para isso é ainda mais simples, já que binário e hexa são bases multiplas entre si.

No caso, se seus ints tem 32 bits, e se o mais significativo não é sinal, use o Long.parseLong no lugar do Integer.parseInt.

Muito obrigada pela idéia vou ver… E qto um pouco de javadoc eu tbm havia olhado, antes de postar rs e já havia tentando da forma que o Thiago mostrou ñ funciona o seu funcionou, pois é um número pequeno tente com 32 bits fazer esse conversão… !!!

E, se funcionar mostrarei como eu fiz… Agradecida.

Obrigada \o/

Thanks Vini…
Funcionou… Qdo troquei o Integer.parseInt por Long.parseLong; //só bastou fazer essa troca funcionou!!!

long saida1 = Long.parseLong(result1,2) & 0xffffffff; int ROTL = (int)saida1 | (int)saida2;

Fiquem com Deus!!!

É, como o Java não tem unsigned, fazer esse tipo de conversão é muito comum.

Eu trabalhava com protocolos, que interoperavam com aplicações C++. Então, constantemente era obrigado a promover bytes para shorts, shorts para integers, integer para longs e, por sorte, não precisei converter longs para bigintegers. Sem essa promoção, é impossível representar o primeiro bit como bit de sinal.

Pois é… Devido java não possuir unsigned demorei um pouco para desenvolver o programinha de criptografia, pois seria + simples desenvolve-lo em C talvez a maioria dos artigos e referência que busquei até o momento foram desenvolvidos em C. Mas, meu orientador deseja java, enfim… Tenho que terminar o programinha essa semana pretendo ele agora só está decriptografando errado, vou fazer o famoso teste de mesa rsrs* verificar e analisar cada método que eu fiz!!! Pois, depois devo fazer a criptografia de arquivos com ele*
Mas, estou trabalhando com int, pq o tamanho da minha word são de 32 bits, a quantidade de rotações são 12 e o tamanho em bytes da chave são de 16. Apenas a chave é do tipo char[];

Valeu mesmo pela dica,
Agradecida!!!