Como transformar uma String em Integer?

Preciso converter o endereço IP que já Está convertido em hexadecimal através de um método que retorna String porém preciso obter o Ip Minimo Fazendo o o BitABit, com isso não Consigo Transformar esse resultado em Integer, Segue código:

			String enderecoHexa = converter.StringToHexadecimal(er.getEndereco()); // ese método retorna String 0xAC1C6301
			Integer.parseInt(enderecoHexa);
			System.out.println(enderecoHexa);

porem aparece o Seguinte Erro :
Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: “0xAC1C6301”
** at java.lang.NumberFormatException.forInputString(Unknown Source)**
** at java.lang.Integer.parseInt(Unknown Source)**
** at java.lang.Integer.parseInt(Unknown Source)**
** at visao.swing.scan.PainelDadosRede$2.actionPerformed(PainelDadosRede.java:127)**
** at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)**
** at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)**
** at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)**
** at javax.swing.DefaultButtonModel.setPressed(Unknown Source)**
** at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)**
** at java.awt.Component.processMouseEvent(Unknown Source)**
** at javax.swing.JComponent.processMouseEvent(Unknown Source)**
** at java.awt.Component.processEvent(Unknown Source)**
** at java.awt.Container.processEvent(Unknown Source)**
** at java.awt.Component.dispatchEventImpl(Unknown Source)**
** at java.awt.Container.dispatchEventImpl(Unknown Source)**
** at java.awt.Component.dispatchEvent(Unknown Source)**
** at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)**
** at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)**
** at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)**
** at java.awt.Container.dispatchEventImpl(Unknown Source)**
** at java.awt.Window.dispatchEventImpl(Unknown Source)**
** at java.awt.Component.dispatchEvent(Unknown Source)**
** at java.awt.EventQueue.dispatchEventImpl(Unknown Source)**
** at java.awt.EventQueue.access$500(Unknown Source)**
** at java.awt.EventQueue$3.run(Unknown Source)**
** at java.awt.EventQueue$3.run(Unknown Source)**
** at java.security.AccessController.doPrivileged(Native Method)**
** at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)**
** at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)**
** at java.awt.EventQueue$4.run(Unknown Source)**
** at java.awt.EventQueue$4.run(Unknown Source)**
** at java.security.AccessController.doPrivileged(Native Method)**
** at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)**
** at java.awt.EventQueue.dispatchEvent(Unknown Source)**
** at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)**
** at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)**
** at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)**
** at java.awt.EventDispatchThread.pumpEvents(Unknown Source)**
** at java.awt.EventDispatchThread.pumpEvents(Unknown Source)**
** at java.awt.EventDispatchThread.run(Unknown Source)**

Boa tarde, @Igor_Augusto. Consegui fazer o parse da sua string apenas para Long já que o número inteiro gerado é muito grande para a classe Integer. Ficou assim:

Long.ParseLong(“AC1C6301”, 16);

E tive que dá um replace no ‘0x’ para funcionar.

Então Essa Entrada no método Precisa Ser integer para que funcione no meu método que irá calcular o range, Segue o código:

		int hexIp = 0xAC1C6301;
	int hexMas = 0xFFFFF800;
	
	int hostMin = hexIp & hexMas;

		for (int i = 1; i <= converterIP.betweenIp((short) 28); i++) {
			if (i == 1){
				IpMinimo = converterIP.endToDec(Integer.toBinaryString(hostMin + i));
			}
			if (i == converterIP.betweenIp((short) 28)){
				IpMaximo = converterIP.endToDec(Integer.toBinaryString(hostMin + i));
			}
			System.out.println(converterIP.endToDec(Integer.toBinaryString(hostMin + i)));
		}

Eles Estão em Hexadecimal mas entram em um Int, Ficando com o valor -2048 e -1407425791 Perfeito para usar nesse Operação “int hostMin = hexIp & hexMas;” Porém não sei como executar Fazer esse valor que entra manual Entrar através de um método String, Se conseguir Algo …

O problema é que ainda não consegui passar o valor em String direto para Integer?

1 curtida

Poderia alterar a expressão para ((Number)Long.parseLong(“AC1C6301”, 16)).intValue();

O valor retornando é esse: -1407425791

1 curtida

Não pode esquecer que, em Java, um byte vai de -128 até +127.
Já os bytes do IP vão de 0 à 255.
Então são necessários umas tratativas para apresentar corretamente os valores.

Veja este exemplo:

public class Exemplo {

    public static void main(String[] args) {
        try {
            Exemplo programa = new Exemplo();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    private void executar() {
        String ipString = "192.168.0.1";
        System.out.println("ip:     " + ipString);

        byte[] ipBytes = stringToBytes(ipString);
        int ipInt = bytesToInt(ipBytes);
        System.out.println("ip-min: " + ipInt + "    hexa: " + Integer.toHexString(ipInt));

        ipBytes = intToBytes(ipInt);
        ipString = bytesToString(ipBytes);
        System.out.println("ip:     " + ipString);
    }

    private byte[] stringToBytes(String ip) {
        String[] pedacos = ip.split("\\.");
        byte[] bytes = new byte[4];
        bytes[0] = (byte) Integer.parseInt(pedacos[0]);
        bytes[1] = (byte) Integer.parseInt(pedacos[1]);
        bytes[2] = (byte) Integer.parseInt(pedacos[2]);
        bytes[3] = (byte) Integer.parseInt(pedacos[3]);
        return bytes;
    }

    private String bytesToString(byte[] bytes) {
        return String.format("%d.%d.%d.%d", bytes[0] & 0xFF, bytes[1] & 0xFF, bytes[2] & 0xFF, bytes[3] & 0xFF);
    }

    private int bytesToInt(byte[] bytes) {
        int valor = 0;
        valor += (bytes[0] << 24);
        valor += (bytes[1] << 16);
        valor += (bytes[2] << 8);
        valor += (bytes[3] << 0);
        return valor;
    }

    private byte[] intToBytes(int valor) {
        byte[] bytes = new byte[4];
        bytes[0] = (byte) ((valor >>> 24) & 0xFF);
        bytes[1] = (byte) ((valor >>> 16) & 0xFF);
        bytes[2] = (byte) ((valor >>> 8) & 0xFF);
        bytes[3] = (byte) ((valor >>> 0) & 0xFF);
        return bytes;
    }
}