دعونا نلقي نظرة على رمز المثال أولاً:
انسخ رمز الكود كما يلي:
classp
{
Privatestaticlongiptolong(stringstrip)
// تحويل عنوان IP في شكل 127.0.0.1 إلى عدد صحيح عشري لا يتم تنفيذ معالجة الأخطاء هنا.
{
intj=0;
إنتي=0;
long[]ip=newlong[4];
intposition1=strip.indexof(".");
intposition2=strip.indexof(".",position1+1);
intposition3=strip.indexof(".",position2+1);
ip[0]=long.parselong(strip.substring(0,position1));
ip[1]=long.parselong(strip.substring(position1+1,position2));
ip[2]=long.parselong(strip.substring(position2+1,position3));
ip[3]=long.parselong(strip.substring(position3+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)
// قم بتحويل نموذج العدد الصحيح العشري إلى عنوان IP على شكل 127.0.0.1، وأدخل ping3396362403l في موجه الأوامر
{
stringbuffersb=newstringbuffer("");
sb.append(string.valueof(longip>>>24));// إزاحة لليمين بمقدار 24 بت مباشرة
sb.append(".");
sb.append(string.valueof((longip&0x00ffffff)>>>>16));// اضبط أعلى 8 بت على 0، ثم قم بالتحريك لليمين بمقدار 16 بت
sb.append(".");
sb.append(string.valueof((longip&0x0000ffff)>>>>8));
sb.append(".");
sb.append(string.valueof(longip&0x000000ff));
sb.append(".");
returnb.tostring();
}
publicstaticvoidmain(string[]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(longtoip(3396362403l));
}
}
نتائج التشغيل:
المظاهر المختلفة لعناوين IP:
النموذج الثنائي 32 بت: 11001010011100000110000010100011
النموذج العشري: 3396362403
النموذج الشائع: 202.112.96.163.
اكتمل الإخراج (يستغرق ثانية واحدة) - الإنهاء العادي دعنا نحلل نقاط المعرفة خطوة بخطوة: الرقم الثنائي، الذي تم إزاحته إلى اليسار بمقدار n بت، هو ضرب قيمة الرقم في 2 مرفوعًا إلى القوة n والقسمة على اثنين، هذا هو التحول إلى اليمين موضع واحد
1. تحويل عنوان IP إلى عدد صحيح مبدأ <BR>: يمكن اعتبار كل جزء من عنوان IP عددًا صحيحًا غير موقّع مكون من 8 بت، أي 0-255. قم بتقسيم كل مقطع إلى نموذج ثنائي ودمجه، ثم تحويله الرقم الثنائي في Unsigned 32 هو عدد صحيح.
مثال: عنوان IP هو 10.0.3.193
الرقم الثنائي المقابل لكل قطعة من الأرقام
1000001010
000000000
300000011
19311000001
المجموعة هي: 00001010000000000000001111000001. عند تحويلها إلى رقم عشري، تكون: 167773121، أي أن الرقم المحول لعنوان IP هو.
الرمز هو كما يلي
انسخ رمز الكود كما يلي:
publicclassIp{
publicstaticvoidmain(String[]args){
System.out.print(ip2int("10.0.3.193"));
}
publicstaticlongip2int(Stringip){
String[]items=ip.split(".");
returnLong.valueOf(items[0])<<24
|Long.valueOf(items[1])<<16
|Long.valueOf(items[2])<<8
|Long.valueOf(items[3]);
}
}
2. تحويل عدد صحيح إلى عنوان IP مبدأ <BR>: تحويل هذا العدد الصحيح إلى رقم ثنائي 32 بت. من اليسار إلى اليمين، قم بتقسيم كل 8 بتات للحصول على 4 أجزاء من أرقام ثنائية مكونة من 8 بتات. قم بتحويل هذه الأرقام الثنائية إلى أعداد صحيحة وأضف "." هذا هو عنوان IP: 167773121
التمثيل الثنائي هو: 0000101000000000000001111000001
قسمها إلى أربعة أجزاء: 00001010، 00001010، 00000011، 11000001. بعد تحويلها إلى أعداد صحيحة وإضافة "."، تحصل على 10.0.3.193.
الرمز هو كما يلي
انسخ رمز الكود كما يلي:
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);
returnb.toString();
}
}