将四个32位的int转换为java中的IP地址

use*_*491 3 java ip 32-bit type-conversion

使用此处的代码:https://libbits.wordpress.com/2011/05/17/check-if-ip-is-within-range-specified-in-cidr-in-java/

  // Step 1. Convert IPs into ints (32 bits). 
// E.g. 157.166.224.26 becomes 10011101  10100110  11100000 00011010
int addr = (( 157 << 24 ) & 0xFF000000) 
           | (( 166 << 16 ) & 0xFF0000) 
           | (( 224 << 8 ) & 0xFF00) 
           |  ( 26 & 0xFF);

// Step 2. Get CIDR mask
int mask = (-1) << (32 - 10);

// Step 3. Find lowest IP address
int lowest = addr & mask;

// Step 4. Find highest IP address
int highest = lowest + (~mask);
Run Code Online (Sandbox Code Playgroud)

我能够将一个字符串分成四个整数并为我的IP范围创建边界.现在我希望能够生成介于最高值和最低值之间的ip.例如:给定范围:157.166.224.26/10我得到的地址为-1650008038,我的最低IP地址为-1652555776,最高IP地址为-1648361473.现在我需要生成一个介于最低和最高之间的数字并将其转换回四个整数,最后一部分是我迷失的地方,我不知道如何将-1648361473转换为IP地址

tof*_*der 5

这很简单.假设IPv4地址在ipaddr变量中,你可以这样写:

byte[] addr = new byte[4];
addr[0] = (ipaddr >> 24) & 0xFF;
addr[1] = (ipaddr >> 16) & 0xFF;
addr[2] = (ipaddr >> 8 ) & 0xFF;
addr[3] = ipaddr & 0xFF;

InetAddress inetAddr = InetAddress.getByAddress(addr);
Run Code Online (Sandbox Code Playgroud)