Java: преобразуйте интервал в InetAddress

Я имею int который содержит IP-адрес в сетевом порядке байтов, который я хотел бы преобразовать в InetAddress объект. Я вижу, что существует InetAddress конструктор, который берет a byte[], действительно ли необходимо преобразовать int к a byte[] во-первых, или есть ли иначе?

29
задан kdt 24 December 2009 в 09:59
поделиться

3 ответа

Это должно сработать:

int ipAddress = ....
byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
InetAddress address = InetAddress.getByAddress(bytes);

Возможно, придется поменять порядок следования байтового массива, я не могу понять, будет ли массив сгенерирован в правильном порядке

.
12
ответ дан 28 November 2019 в 01:42
поделиться

Может сработать попытка


public static String intToIp(int i) {
        return ((i >> 24 ) & 0xFF) + "." +
               ((i >> 16 ) & 0xFF) + "." +
               ((i >>  8 ) & 0xFF) + "." +
               ( i        & 0xFF);
    }

-1
ответ дан 28 November 2019 в 01:42
поделиться

Недостаточно репутации, чтобы комментировать ответ Skaffman, поэтому я добавлю это как отдельный ответ.

Решение Skaffman предлагает правильно с одним исключением. BIGINTEGER.TOBYTEARRAY () Возвращает массив байтов, который может иметь ведущий знак.

byte[] bytes = bigInteger.toByteArray();

byte[] inetAddressBytes;

// Should be 4 (IPv4) or 16 (IPv6) bytes long
if (bytes.length == 5 || bytes.length == 17) {
    // Remove byte with most significant bit.
    inetAddressBytes = ArrayUtils.remove(bytes, 0);
} else {
    inetAddressBytes = bytes;
}

InetAddress address = InetAddress.getByAddress(inetAddressBytes);

Приведенный выше код использует ArrayUtils из Apache Commons Lang.

1
ответ дан 28 November 2019 в 01:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: