У меня проблема с преобразованием шестнадцатеричного в IP-адрес.Например, у меня есть две строки «b019e85» и «ac12accf», которые представляют IP «11.1.158.133» и «172.18.172.207».Есть ли удобный способ преобразования такой шестнадцатеричной строки в IP-адрес?Я прочитал несколько ответов, таких как onvert-hexadecimal-string-to-ip-address и java-convert-int-to-inetaddress .Но оба они не работают.Либо выдает исключение «java.net.UnknownHostException: addr имеет недопустимую длину», либо «java.lang.IllegalArgumentException: hexBinary должен быть четной длины: b019e85». Пример кода:
InetAddress vipAddress = InetAddress.getByAddress(DatatypeConverter.parseHexBinary("b019e85"));
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Я пишу небольшой вспомогательный метод для преобразования hex в ip (только ipv4).Это не делает проверку действительности.
private String getIpByHex(String hex) {
Long ipLong = Long.parseLong(hex, 16);
String ipString = String.format("%d.%d.%d.%d", ipLong >> 24,
ipLong >> 16 & 0x00000000000000FF,
ipLong >> 8 & 0x00000000000000FF,
ipLong & 0x00000000000000FF);
return ipString;
}