Mari kita lihat contoh kodenya terlebih dahulu:
Copy kode kodenya sebagai berikut:
kelas
{
privatestaticlongiptolong(stringstrip)
//Mengonversi alamat IP dalam bentuk 127.0.0.1 menjadi bilangan bulat desimal. Tidak ada penanganan kesalahan yang dilakukan di sini.
{
intj=0;
inti=0;
panjang[]ip=barupanjang[4];
intposition1=strip.indexof(".");
intposition2=strip.indexof(".",posisi1+1);
intposition3=strip.indexof(".",posisi2+1);
ip[0]=long.parselong(strip.substring(0,posisi1));
ip[1]=long.parselong(strip.substring(posisi1+1,posisi2));
ip[2]=long.parselong(strip.substring(posisi2+1,posisi3));
ip[3]=long.parselong(strip.substring(posisi3+1));
kembali(ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3];//ip1*256*256*256+ip2*256* 256+ip3*256+ip4
}
privatestaticstringlongtoip(longlongip)
//Ubah bentuk bilangan bulat desimal menjadi alamat IP berupa 127.0.0.1, masukkan ping3396362403l pada command prompt
{
stringbuffersb=stringbuffer baru("");
sb.append(string.valueof(longip>>>24));//Bergeser ke kanan sebanyak 24 bit secara langsung
sb.tambahkan(".");
sb.append(string.valueof((longip&0x00ffffff)>>>>16));//Setel 8 bit tinggi ke 0, lalu geser ke kanan sebanyak 16 bit
sb.tambahkan(".");
sb.append(string.valueof((longip&0x0000ffff)>>>>8));
sb.tambahkan(".");
sb.append(string.valueof(longip&0x000000ff));
sb.tambahkan(".");
returnb.tostring();
}
publicstaticvoidmain(string[]args)
{
system.out.println("Berbagai ekspresi alamat ip: rn");
system.out.print("Bentuk biner 32-bit: ");
system.out.println(long.tobinarystring(3396362403l));
system.out.print("Bentuk Desimal :");
sistem.keluar.println(iptolong("202.112.96.163"));
system.out.print("Bentuk umum:");
system.out.println(longtoip(3396362403l));
}
}
Hasil berjalan:
Berbagai manifestasi alamat IP:
Bentuk biner 32-bit: 11001010011100000110000010100011
Bentuk desimal: 3396362403
Bentuk umum: 202.112.96.163.
Keluaran selesai (memakan waktu 1 detik) - penghentian normal. Mari kita analisis poin pengetahuan selangkah demi selangkah: bilangan biner, digeser ke kiri sebesar n bit, adalah mengalikan nilai bilangan tersebut dengan 2 pangkat n dan membaginya dengan dua, yaitu Shift ke kanan satu posisi
1. Ubah alamat IP menjadi bilangan bulat Prinsip <BR>: Setiap segmen alamat IP dapat dianggap sebagai bilangan bulat 8-bit yang tidak ditandatangani, yaitu 0-255. Pisahkan setiap segmen menjadi bentuk biner dan gabungkan, lalu konversikan bilangan biner menjadi Unsigned 32 adalah bilangan bulat.
Contoh: Alamat IP adalah 10.0.3.193
Bilangan biner yang sesuai dengan setiap segmen bilangan
1000001010
000000000
300000011
19311000001
Kombinasinya adalah: 00001010000000000000001111000001. Jika dikonversi ke desimal, menjadi: 167773121, yaitu nomor alamat IP yang dikonversi.
Kodenya adalah sebagai berikut
Copy kode kodenya sebagai berikut:
kelas publikIp{
publicstaticvoidmain(String[]args){
Sistem.keluar.cetak(ip2int("10.0.3.193"));
}
publicstaticlongip2int(Stringip){
String[]item=ip.split(".");
returnLong.valueOf(item[0])<<24
|Panjang.valueOf(item[1])<<16
|Panjang.valueOf(item[2])<<8
|Panjang.valueOf(item[3]);
}
}
2. Mengonversi bilangan bulat menjadi alamat IP <BR>Prinsip: Ubah bilangan bulat ini menjadi bilangan biner 32-bit. Dari kiri ke kanan, bagi setiap 8 bit untuk mendapatkan 4 segmen bilangan biner 8-bit. Ubah bilangan biner ini menjadi bilangan bulat dan tambahkan "." Ini adalah alamat IP
Representasi binernya adalah: 00001010000000000000001111000001
Bagilah menjadi empat segmen: 00001010, 00001010, 00000011, 11000001. Setelah mengonversinya menjadi bilangan bulat dan menambahkan ".", Anda mendapatkan 10.0.3.193.
Kodenya adalah sebagai berikut
Copy kode kodenya sebagai berikut:
kelas publikIp{
publicstaticvoidmain(String[]args){
Sistem.keluar.cetak(int2ip(167773121));
}
publicstaticStringint2ip(longipInt){
StringBuildersb=StringBuilderbaru();
sb.append(ipInt&0xFF).append(".");
sb.append((ipInt>>8)&0xFF).append(".");
sb.append((ipInt>>16)&0xFF).append(".");
sb.append((ipInt>>24)&0xFF);
returnb.toString();
}
}