从 127.0.0.1 转到 2130706433,然后再返回

2022-09-02 00:03:30

使用标准的 Java 库,从 IPV4 地址的虚线字符串表示形式 () 到等效整数表示形式的最快方法是什么 ?"127.0.0.1"2130706433

相应地,反转所述操作的最快方法是什么 - 从整数到字符串表示?2130706433"127.0.0.1"


答案 1

字符串到整型:

int pack(byte[] bytes) {
  int val = 0;
  for (int i = 0; i < bytes.length; i++) {
    val <<= 8;
    val |= bytes[i] & 0xff;
  }
  return val;
}

pack(InetAddress.getByName(dottedString).getAddress());

整型到字符串:

byte[] unpack(int bytes) {
  return new byte[] {
    (byte)((bytes >>> 24) & 0xff),
    (byte)((bytes >>> 16) & 0xff),
    (byte)((bytes >>>  8) & 0xff),
    (byte)((bytes       ) & 0xff)
  };
}


InetAddress.getByAddress(unpack(packedBytes)).getHostAddress()

答案 2

您还可以使用Google番石榴InetAddress Class。

String ip = "192.168.0.1";
InetAddress addr = InetAddresses.forString(ip);
// Convert to int
int address = InetAddresses.coerceToInteger(addr);
// Back to str 
String addressStr = InetAddresses.fromInteger(address));