تحويل عنوان IP إلى int / long في Java

في هذا البرنامج التعليمي ، سنلقي نظرة على طرق الحصول على رقم عشري (الأساس 10) من عنوان IP. استخدام ترميز IP العشري (الأساس 10) غريب بعض الشيء على الرغم من السماح به في المتصفح.

كيفية ترميز عنوان IP في decimal< / h2>
يتكون عنوان IP من مجموعة من 4 أرقام. على سبيل المثال ، إذا كنت تريد ترميز 192.168.1.1 في عدد عشري ، فيجب عليك اكتشاف الأرقام المفصولة ب "." لعنوان IP في Java باستخدام الدالة تقسيم< / امتداد> ووضع كل واحد في مربع في الجدول. عنوان IP هو الأساس 256 ، وهنا صيغة التحويل:

< / div>
192 x 256 ^ 3 + 168 × 256 ^ 2 + 1 × 256 ^ 1 + 1 × 1
3221225472 + 11010048 + 256 + 1 = 3232235777
< / pre>< / div>
يمكنك التحقق من ذلك بالانتقال إلى المتصفح
http://3232235777
طريقتان للتعبير عن عنوان IP برقم عشري:

1- عنوان IP في إزاحة البت

نحول n * 8 بت إلى اليسار ، إنها طريقة لجعل الطاقة بطريقة ثنائية. فيما يلي مثال على إزاحة 8 بت من آخر عدد من  192.168.1.1:

بت إزاحة عنوان IP إزاحة 8 بت< / a>< / td>< / tr>
مثال على حساب (1 × 256 ^ 1) في < الثنائي / td>< / tr>< / tbody>< / table>
< pre class = "prettyprint lang-java">public class IP_Decimale {

الفراغ الثابت العام الرئيسي (السلسلة [] صفر) {
سلسلة IP = "192.168.1.1" ؛
// عنوان IP في النظام العشري
طول iplong = IPenBase10 (ip) ؛
System.out.println (iplong) ؛
}

IPenBase10 العام الثابت الطويل (عنوان IP للسلسلة) {

عشري طويل = 0 ؛

// الأرقام مفصولة بنقاط
//ضع كل منها في مربع في الصفيف
String[] arrayIP = IP.address.split("\\.");

//من اليمين إلى اليسار
ل (int i = 3 ؛ i > = 0 ؛ i--) {
// تحويل إلى long
long ip = Long.parseLong (arrayIP [3 - i]) ؛
// shift (i * 8) بت إلى اليسار ومجموع
إزاحة بت طويلة = IP < < (ط*8)؛
عشري += إزاحة البتات ؛
System.out.println (IP +" < < "+(i*8)+" : "+bitshift);
}
إرجاع عشري ؛
}
}
< / pre> Output
< pre class = "prettyprint lang-java" >192 < < 24 : 3221225472
168 < < 16 : 11010048< / >1 < < 8 : 256< / >1 < < 0: 1
النتيجة: 3232235777
< / pre>

2- عنوان IP للطاقة 256< / b>< / h2>تتكون هذه الطريقة من حساب الطاقة باستخدام الدالة Math.pow واضرب في رقم عنوان IP.

public ثابت طويل IPenBase10puiss(عنوان IP للسلسلة) {

عشري طويل = 0;
سلسلة [] arrayIP = IP.address.split ("\\.") ؛

// من اليمين إلى اليسار
ل (int i = 0 ؛ i< = 3 ؛ i ++) {
long ip = Long.parseLong (arrayIP [i]) ؛
puiss= ip * (طويل) Math.pow (256 ، 3-i) ؛
عشري += القوى ؛
System.out.println(arrayIP[i] +": "+puiss);
}
إرجاع عشري ؛
}
المراجع:
الشبكة في جافا: معالجة عناوين IP
Assist: كيفية ترميز عنوان IP في النظام العشري؟
ويكيبيديا: تحولات البت
rice جامعة: دليل معالجة بت جافا
StackOverFlow:  تحويل عنوان IP إلى رقم عشري والعكس صحيح < / أ>