Eu quero tirar os pontinhos do ip e converter este resultado para uma variavel Long oq eu faço???
Me ajudem por favor
publicclassTestando{publicstaticvoidmain(Stringargs[]){long[]ip_convertido=newlong[4];String[]ip_tratado=newString[4];String[]ip_original=newString[4];ip_original[0]="172.16.211.207";ip_original[1]="172.16.211.187";ip_original[2]="172.16.211.227";ip_original[3]="127.0.0.1";//tiraos"."doipearmazenaemumastringfor(inti=0;i<=3;i++){ip_tratado[i]=ip_original[i].replaceAll("\.","");//tiraospontosearmazenaemip_tratadoip_convertido[i]=Long.ParseLong(ip_tratado[i]);//**DEVERIA** converter "ip tratado" em LONG } }}
(Faça a seguinte experiência - veja se http://72.5.124.161 e http://264600737 não vão para o mesmo lugar (o site da Sun). Infelizmente meu proxy vê o endereço http://264600737 e se embanana todo, achando que tem de acessar uma URL dentro da empresa.
Não tire os pontinhos, hein? Senão você vai ter o problema de não saber se o endereço era “172.16.211.207” ou “172.162.112.07” ou coisa parecida. Use a conversão que lhe indiquei.
T
thingol
importjava.net.*;classParseIP{publicstaticvoidmain(String[]args){StringstrIP="72.5.124.161";InetAddressaddr=null;try{addr=InetAddress.getByName(strIP);}catch(UnknownHostExceptionex){}byte[]ip=addr.getAddress();// Queremos pegar o valor acima, que é o byte array {72, 5, 124, 161} e converter// em um longlonglongIP=((ip[0]&0xFF)<<24)|((ip[1]&0xFF)<<16)|((ip[2]&0xFF)<<8)|(ip[3]&0xFF);System.out.println(longIP);// deve imprimir "[telefone removido]"// Agora queremos fazer o contrário. Dado esse valor, queremos montar novamente a string original.byte[]ip2=newbyte[4];ip2[0]=(byte)(longIP>>24);ip2[1]=(byte)(longIP>>16);ip2[2]=(byte)(longIP>>8);ip2[3]=(byte)(longIP);Strings=String.format("%d.%d.%d.%d",ip2[0]&0xFF,ip2[1]&0xFF,ip2[2]&0xFF,ip2[3]&0xFF);System.out.println(s);// deve imprimir "72.5.124.161"}}
andoliveira4
cara desculpe mais eu não entendi
pra não dar esse problema q vc falou eu criei um vetor paralelo que tem nas mesmas posições porem com os ips de forma correta ex:
eu preciso desse valor pra comparar entre um grupo de maquinas pra saber qual tem o maior IP
T
thingol
Amigo, tirando os pontos, você não sabe o IP se é “17.216.2112.07” ou “172.16.211.207” ou "“172.162.11.207” ou "“172.162.112.07” - todos os IPs são válidos e tirando os pontos dá o mesmo valor, "“[telefone removido]”. É por isso que lhe sugeri a conversão padrão.
Outra forma de comparar 2 IPs sem ter de fazer a conversão padrão é comparar parte por parte; mas nunca tire os pontos, porque são significantes.
T
thingol
Se você quer simplesmente comparar 2 IPs numéricos, você pode tentar algo como o seguinte código:
importjava.util.*;classTesteOrdenacaoIPs{publicstaticvoidmain(String[]args){List<String>ips=newArrayList<String>();ips.add("207.46.19.190");ips.add("72.5.124.61");ips.add("198.182.196.56");ips.add("199.232.41.5");Collections.sort(ips,newComparator<String>(){privateint[]parseIP(Strings){int[]ip=newint[4];String[]strIP=s.split("\.");for(inti=0;i<4;++i){ip[i]=Integer.parseInt(strIP[i]);}returnip;}publicintcompare(Strings1,Strings2){int[]ip1=parseIP(s1);int[]ip2=parseIP(s2);if(ip1[0]!=ip2[0])returnip1[0]-ip2[0];if(ip1[1]!=ip2[1])returnip1[1]-ip2[1];if(ip1[2]!=ip2[2])returnip1[2]-ip2[2];returnip1[3]-ip2[3];}});System.out.println(ips);// deve imprimir:// [72.5.124.61, 198.182.196.56, 199.232.41.5, 207.46.19.190]}}