一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java實(shí)現(xiàn)ip地址和int數(shù)字的相互轉(zhuǎn)換

Java實(shí)現(xiàn)ip地址和int數(shù)字的相互轉(zhuǎn)換

2020-09-15 01:09laosun Java教程

這篇文章主要介紹了Java實(shí)現(xiàn)ip地址和int數(shù)字的相互轉(zhuǎn)換,幫助大家更好的利用Java處理數(shù)據(jù),感興趣的朋友可以了解下

Java版本的 ip地址和int數(shù)字的相互轉(zhuǎn)換

對(duì)于ipv4的地址來(lái)說(shuō),如果用字符串的形式存儲(chǔ)的話,其占用字節(jié)就比較大,比如對(duì)于IPv4地址0.0.0.0的字符串,就需要7個(gè)字節(jié),IPv4為255.255.255.255 的字符串,需要15個(gè)字節(jié),也就是說(shuō)存儲(chǔ)一個(gè)ip需要占用7~15個(gè)字節(jié)。

那么有沒(méi)有更節(jié)省空間的存儲(chǔ)方式呢?答案是有。

方案1:

直接把字符串中的'.'去掉,不就變成一個(gè)數(shù)字了嘛,比如 "255.255.255.255" 變成 255255255255,然而我們知道int所能表示的最大值 = Integer.MAX_VALUE = 2^31-1 = 2147483647, 255255255255 > 2^31-1,所以需要用長(zhǎng)整形long來(lái)表示,長(zhǎng)整形占用8個(gè)字節(jié),也就是說(shuō)我們將7~15個(gè)字節(jié)轉(zhuǎn)換為8字節(jié),在絕大多數(shù)情況下是節(jié)省空間了的。

方案2:

因?yàn)榭紤]到IPv4的地址本質(zhì)上就是32位的二進(jìn)制串,而一個(gè)int類型的數(shù)字剛好為4個(gè)字節(jié)32個(gè)bit位,所以剛好可以用一個(gè)int類型的數(shù)字轉(zhuǎn)表示IPv4地址。所以,我們可以用4個(gè)字節(jié)的int數(shù)字表示一個(gè)ip地址,這樣可以大大節(jié)省空間。

這里只討論方案2 :)

演示

對(duì)于ipv4地址: 192.168.1.3:

每段都用二進(jìn)制表示: 192(10) = 11000000(2) ; 168(10) = 10101000(2) ; 1(10) = 00000001(2) ; 3(10) = 00000011(2) 。

所以連在一起就是:11000000101010000000000100000011,對(duì)應(yīng)的int數(shù)字就是-1062731775 。

具體算法分析:

192左移24位: 11000000 00000000 00000000 00000000

168左移16位: 00000000 10101000 00000000 00000000

001左移08位: 00000000 00000000 00000001 00000000

003左移00位: 00000000 00000000 00000000 00000011

按位或結(jié)果 : 11000000 10101000 00000001 00000011

即 -1062731775

將int類型的數(shù)字轉(zhuǎn)換成ip地址,其實(shí)就是上述過(guò)程的逆過(guò)程,這里就不再贅述。

具體實(shí)現(xiàn)方式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.sunjs.kit;
 
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
/**
 * IPv4地址和int數(shù)字的互換
 * @author sun
 */
public class IpKit {
 
  /**
   * IPv4地址轉(zhuǎn)換為int類型數(shù)字
   * @param ipv4Addr
   * @return
   */
  public static int ipToInt(String ipv4Addr) {
    // 判斷是否是ip格式的
    if (!isIPv4Address(ipv4Addr))
      throw new RuntimeException("Invalid ip address");
 
    // 匹配數(shù)字
    Pattern pattern = Pattern.compile("\\d+");
    Matcher matcher = pattern.matcher(ipv4Addr);
    int result = 0;
    int counter = 0;
    while (matcher.find()) {
      int value = Integer.parseInt(matcher.group());
      result = (value << 8 * (3 - counter++)) | result;
    }
    return result;
  }
 
  /**
   * 判斷是否為ipv4地址
   * @param ipv4Addr
   * @return
   */
  private static boolean isIPv4Address(String ipv4Addr) {
    String lower = "(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])"; // 0-255的數(shù)字
    String regex = lower + "(\\." + lower + "){3}";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(ipv4Addr);
    return matcher.matches();
  }
   
  /**
   * 將int數(shù)字轉(zhuǎn)換成ipv4地址
   * @param ip
   * @return
   */
  public static String intToIp(int ip) {
    StringBuilder sb = new StringBuilder();
    int num = 0;
    boolean needPoint = false; // 是否需要加入'.'
    for (int i = 0; i < 4; i++) {
      if (needPoint) {
        sb.append('.');
      }
      needPoint = true;
      int offset = 8 * (3 - i);
      num = (ip >> offset) & 0xff;
      sb.append(num);
    }
    return sb.toString();
  }
   
  public static void main(String[] args) {
    String ip = "124.202.200.166";
  System.out.println(ipToInt(ip));
  System.out.println(intToIp(2093664422));
  }
   
}

以上就是Java實(shí)現(xiàn)ip地址和int數(shù)字的相互轉(zhuǎn)換的詳細(xì)內(nèi)容,更多關(guān)于Java ip和數(shù)字相互轉(zhuǎn)換的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://www.sunjs.com/article/detail/f6a49fa32bef4b63b26aa4a8ac551a79.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 好大好热 | 99午夜| 国产福利一区二区在线精品 | 日本在线不卡免 | 91无毒不卡 | 国产精品毛片高清在线完整版 | 成人福利在线视频免费观看 | 天天做天天爱天天一爽一毛片 | 荡娃艳妇有声小说 | 暖暖视频高清图片免费完整版 | 亚洲AV国产福利精品在现观看 | 国产九九在线 | 久久免费看少妇高潮A片特爽 | 日韩视频第二页 | 亚洲高清影院 | 国产精品自在线 | 日本高清动作片www欧美 | 北条麻妃黑人 | 久久久无码精品亚洲A片猫咪 | 99精品国产在现线免费 | 四虎影院精品在线观看 | 二次元美女脱裤子让男人桶爽 | 禁漫H天堂免费A漫 | 性欧美f | 香蕉久久夜色精品国产小优 | 国产精品九九免费视频 | 国产一区二 | 国产亚洲精品美女2020久久 | 热久久免费视频 | 国产在线麻豆波多野结衣 | 日本乱人伦中文在线播放 | 国产一页 | 三级aa久久 | 亚洲视频在线观看免费 | 视频大全在线观看免费 | 日韩高清在线免费观看 | 99热这里有免费国产精品 | 高h细节肉爽文办公室 | 91精品国产综合久久消防器材 | 国产成人性毛片aaww | 亚洲高清无在码在线电影 |