Подтвердить что ты не робот

Преобразование шестнадцатеричной строки в IP-адрес

Я хочу преобразовать строковое значение (в шестнадцатеричном формате) в IP-адрес. Как я могу сделать это с помощью Java?

Шестнадцатеричное значение: 0A064156

IP: 10.6.65.86

Этот сайт дает мне правильный результат, но я не уверен, как реализовать это в моем коде.

Можно ли это сделать напрямую в XSLT?

4b9b3361

Ответ 1

попробуйте это

InetAddress a = InetAddress.getByAddress(DatatypeConverter.parseHexBinary("0A064156"));

DatatypeConverter от стандартного пакета javax.xml.bind

Ответ 2

Вы можете разделить шестнадцатеричное значение в группах по 2, а затем преобразовать их в целые числа.

0A = 10

06 = 06

65 = 41

86 = 56

Код:

String hexValue = "0A064156";
String ip = "";

for(int i = 0; i < hexValue.length(); i = i + 2) {
    ip = ip + Integer.valueOf(hexValue.subString(i, i+2), 16) + ".";
}

System.out.println("Ip = " + ip);

Вывод:

Ip = 10,6,65,86.

Ответ 3

public String convertHexToString(String hex){

  StringBuilder sb = new StringBuilder();
  StringBuilder temp = new StringBuilder();

  for( int i=0; i<hex.length()-1; i+=2 ){


      String output = hex.substring(i, (i + 2));

      int decimal = Integer.parseInt(output, 16);

      sb.append((char)decimal);

      temp.append(decimal);
          temp.append(".");
  }
  System.out.println("Decimal : " + temp.toString());

  return sb.toString();

}

Ответ 4

Вы можете использовать следующий метод:

public static String convertHexToIP(String hex)
{
    String ip= "";

    for (int j = 0; j < hex.length(); j+=2) {
        String sub = hex.substring(j, j+2);
        int num = Integer.parseInt(sub, 16);
        ip += num+".";
    }

    ip = ip.substring(0, ip.length()-1);
    return ip;
}

Ответ 5

Принятый ответ имеет требование, что гекс должен быть четной длины. Вот мой ответ:

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;
}

Ответ 6

Вы можете разделить его на 2 символа, а затем использовать Integer.parse(string, radix) для преобразования в целочисленные значения.

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.String,int)

ОБНОВЛЕНИЕ: Ссылка для новой документации: https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#parseInt-java.lang.String-int-