Vejamos primeiro o código de exemplo:
Copie o código do código da seguinte forma:
classe
{
privatestaticlongiptolong(stringstrip)
//Converta o endereço IP no formato 127.0.0.1 em um número inteiro decimal. Nenhum tratamento de erros é executado aqui.
{
intj=0;
inti=0;
longo[]ip=newlong[4];
intposition1=strip.indexof(".");
intposição2=strip.indexof(".",posição1+1);
intposição3=strip.indexof(".",posição2+1);
ip[0]=long.parselong(strip.substring(0,posição1));
ip[1]=long.parselong(strip.substring(posição1+1,posição2));
ip[2]=long.parselong(strip.substring(posição2+1,posição3));
ip[3]=long.parselong(strip.substring(posição3+1));
return(ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3];//ip1*256*256*256+ip2*256* 256+ip3*256+ip4
}
privatestaticstringlongtoip(longlongip)
//Converta o formato inteiro decimal em um endereço IP no formato 127.0.0.1, digite ping3396362403l no prompt de comando
{
stringbuffersb=newstringbuffer("");
sb.append(string.valueof(longip>>>24)); // Desloca 24 bits para a direita diretamente
sb.append(".");
sb.append(string.valueof((longip&0x00ffffff)>>>>16)); //Defina os 8 bits mais altos como 0 e, em seguida, mude 16 bits para a direita
sb.append(".");
sb.append(string.valueof((longip&0x0000ffff)>>>>8));
sb.append(".");
sb.append(string.valueof(longip&0x000000ff));
sb.append(".");
retornab.tostring();
}
publicstaticvoidmain(string[]args)
{
system.out.println("Várias expressões de endereço IP: rn");
system.out.print("Forma binária de 32 bits: ");
system.out.println(long.tobinarystring(3396362403l));
system.out.print("Forma decimal:");
system.out.println(iptolong("202.112.96.163"));
system.out.print("Formulário comum:");
system.out.println(longtoip(3396362403l));
}
}
Resultados em execução:
Várias manifestações de endereços IP:
Formato binário de 32 bits: 11001010011100000110000010100011
Forma decimal: 3396362403
Formulário comum: 202.112.96.163.
Saída concluída (levando 1 segundo) - terminação normal Vamos analisar os pontos de conhecimento passo a passo: um número binário, deslocado para a esquerda em n bits, é multiplicar o valor do número por 2 elevado à enésima potência e dividir por dois, isso é Shift uma posição para a direita
1. Converter endereço IP em número inteiro Princípio: Cada segmento de endereço IP pode ser considerado como um número inteiro não assinado de 8 bits, ou seja, dividir cada segmento em um formato binário e combiná-lo, e então convertê-lo. número binário em um Unsigned 32 é um número inteiro.
Exemplo: um endereço IP é 10.0.3.193
O número binário correspondente a cada segmento de números
1000001010
000000000
300000011
19311000001
A combinação é: 0000101000000000000001111000001. Quando convertido para decimal é: 167773121, ou seja, o número convertido do endereço IP é ele.
O código é o seguinte
Copie o código do código da seguinte forma:
publicclassIp{
publicstaticvoidmain(String[]args){
System.out.print(ip2int("10.0.3.193"));
}
publicstaticlongip2int(Stringip){
String[]items=ip.split(".");
returnLong.valueOf(itens[0])<<24
|Long.valueOf(itens[1])<<16
|Long.valueOf(itens[2])<<8
|Long.valueOf(itens[3]);
}
}
2. Converter um número inteiro em um endereço IP <BR>Princípio: Converter este número inteiro em um número binário de 32 bits. Da esquerda para a direita, divida cada 8 bits para obter 4 segmentos de números binários de 8 bits. Converta esses números binários em inteiros e adicione "."
A representação binária é: 00001010000000000000001111000001
Divida-o em quatro segmentos: 00001010, 00001010, 00000011, 11000001. Após convertê-los para inteiros e adicionar ".", você obtém 10.0.3.193.
O código é o seguinte
Copie o código do código da seguinte forma:
publicclassIp{
publicstaticvoidmain(String[]args){
System.out.print(int2ip(167773121));
}
publicstaticStringint2ip(longipInt){
StringBuildersb=newStringBuilder();
sb.append(ipInt&0xFF).append(".");
sb.append((ipInt>>8)&0xFF).append(".");
sb.append((ipInt>>16)&0xFF).append(".");
sb.append((ipInt>>24)&0xFF);
retornab.toString();
}
}