ลองดูโค้ดตัวอย่างก่อน:
คัดลอกรหัสรหัส ดังต่อไปนี้:
คลาสสิพ
-
privatestaticlongiptolong (แถบสตริง)
//แปลงที่อยู่ IP ในรูปแบบ 127.0.0.1 เป็นจำนวนเต็มทศนิยม ไม่มีการจัดการข้อผิดพลาดที่นี่
-
intj=0;
อินติ=0;
ยาว[]ip=ใหม่ยาว[4];
intposition1=strip.indexof(".");
intposition2=strip.indexof(".",position1+1);
intposition3=strip.indexof(".",position2+1);
ip[0]=long.parselong(strip.substring(0,position1));
ไอพี[1]=long.parselong(strip.substring(position1+1,position2));
ไอพี[2]=long.parselong(strip.substring(position2+1,position3));
ไอพี[3]=long.parselong(strip.substring(position3+1));
กลับ(ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3];//ip1*256*256*256+ip2*256* 256+ไอพี3*256+ไอพี4
-
ส่วนตัวสตริงยาวtoip (longlongip)
// แปลงรูปแบบจำนวนเต็มทศนิยมให้เป็นที่อยู่ IP ในรูปแบบ 127.0.0.1 ป้อน ping3396362403l ที่พรอมต์คำสั่ง
-
stringbuffersb=newstringbuffer("");
sb.append(string.valueof(longip>>>24));//เลื่อนไปทางขวา 24 บิตโดยตรง
sb.ผนวก(".");
sb.append(string.valueof((longip&0x00ffffff)>>>>16));//ตั้งค่าสูง 8 บิตเป็น 0 แล้วเลื่อนไปทางขวา 16 บิต
sb.ผนวก(".");
sb.append(string.valueof((longip&0x0000ffff) >>>>>8));
sb.ผนวก(".");
sb.ผนวก(string.valueof(longip&0x000000ff));
sb.ผนวก(".");
returnb.tostring();
-
publicstaticvoidmain (สตริง [] args)
-
system.out.println("นิพจน์ต่างๆ ของที่อยู่ IP: rn");
system.out.print("รูปแบบไบนารี 32 บิต: ");
system.out.println(long.tobinarystring(3396362403l));
system.out.print("รูปแบบทศนิยม:");
system.out.println(iptolong("202.112.96.163"));
system.out.print("รูปแบบทั่วไป:");
system.out.println(ลองโทไอพี(3396362403l));
-
-
ผลการวิ่ง:
การแสดงที่อยู่ IP ต่างๆ:
รูปแบบไบนารี 32 บิต: 11001010011100000110000010100011
รูปแบบทศนิยม: 3396362403
แบบฟอร์มทั่วไป: 202.112.96.163
เอาต์พุตเสร็จสมบูรณ์ (ใช้เวลา 1 วินาที) - การสิ้นสุดแบบปกติ มาวิเคราะห์จุดความรู้ทีละขั้นตอน: เลขฐานสองเลื่อนไปทางซ้ายด้วย n บิต คือการคูณค่าของตัวเลขด้วย 2 ยกกำลัง n แล้วหารด้วย 2 นั่นคือ Shift ไปทางขวาหนึ่งตำแหน่ง
1. แปลงที่อยู่ IP เป็นจำนวนเต็ม <BR>หลักการ: แต่ละส่วนของที่อยู่ IP สามารถถือเป็นจำนวนเต็ม 8 บิตที่ไม่ได้ลงนาม นั่นคือ 0-255 แยกแต่ละส่วนออกเป็นรูปแบบไบนารี่แล้วรวมเข้าด้วยกัน จากนั้นจึงแปลงค่านี้ เลขฐานสองลงใน Unsigned 32 เป็นจำนวนเต็ม
ตัวอย่าง: ที่อยู่ IP คือ 10.0.3.193
เลขฐานสองที่สอดคล้องกับแต่ละส่วนของตัวเลข
1000001010
000000000
300000011
19311000001
ชุดค่าผสมคือ: 0000101000000000000000111000001 เมื่อแปลงเป็นทศนิยมจะเป็น: 167773121 นั่นคือหมายเลขที่แปลงแล้วของที่อยู่ IP ก็คือ
รหัสมีดังนี้
คัดลอกรหัสรหัส ดังต่อไปนี้:
คลาสสาธารณะIp{
publicstaticvoidmain (สตริง [] args) {
System.out.print(ip2int("10.0.3.193"));
-
publicstaticlongip2int (Stringip) {
สตริง[]รายการ=ip.split(".");
returnLong.valueOf(รายการ[0])<<24
|Long.valueOf(รายการ[1])<<16
|Long.valueOf(รายการ[2])<<8
|Long.valueOf(รายการ[3]);
-
-
2. แปลงจำนวนเต็มให้เป็นที่อยู่ IP <BR>หลักการ: แปลงจำนวนเต็มนี้เป็นเลขฐานสองขนาด 32 บิต จากซ้ายไปขวา หารทุกๆ 8 บิตเพื่อให้ได้ 4 ส่วนของเลขฐานสอง 8 บิต แปลงเลขฐานสองเหล่านี้เป็นจำนวนเต็มแล้วบวก "." นี่คือที่อยู่ IP
การแทนค่าไบนารี่คือ: 00001010000000000000001111000001
แบ่งออกเป็นสี่ส่วน: 00001010, 00001010, 00000011, 11000001 หลังจากแปลงเป็นจำนวนเต็มแล้วบวก "." คุณจะได้รับ 10.0.3.193
รหัสมีดังนี้
คัดลอกรหัสรหัส ดังต่อไปนี้:
คลาสสาธารณะIp{
publicstaticvoidmain (สตริง [] args) {
System.out.print(int2ip(167773121));
-
publicstaticStringint2ip (longipInt) {
StringBuildersb=newStringBuilder();
sb.ผนวก(ipInt&0xFF).ผนวก("");
sb.ผนวก((ipInt>>8)&0xFF).ผนวก(".");
sb.ผนวก((ipInt>>16)&0xFF).ผนวก(".");
sb.ผนวก((ipInt>>24)&0xFF);
returnb.toString();
-
-