我希望将一个十六进制字符串值转换为IP地址,如何使用Java实现?
十六进制值: 0A064156
IP地址: 10.6.65.86
这个网站给出了正确的结果,但我不确定如何在我的代码中实现。
能否直接在XSLT中完成?
我希望将一个十六进制字符串值转换为IP地址,如何使用Java实现?
十六进制值: 0A064156
IP地址: 10.6.65.86
这个网站给出了正确的结果,但我不确定如何在我的代码中实现。
能否直接在XSLT中完成?
试一试
InetAddress a = InetAddress.getByAddress(DatatypeConverter.parseHexBinary("0A064156"));
DatatypeConverter来自标准的javax.xml.bind
包。
Java 9
以后,DatatypeConverter
不再是标准的一部分了:https://github.com/http-kit/http-kit/issues/356 - BullyWiiPlaza你可以将十六进制值分成每两个一组,然后转换为整数。
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。
hexValue.substring
。https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int,%20int) - Paul被接受的答案有一个要求,即十六进制必须是偶数长度。 这是我的答案:
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;
}
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();
}
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;
}
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-