我使用Java (带有Spring框架),并且希望在IPv4地址的数字表示(例如2130706433)和它们的文本副本(例如127.0.0.1)之间进行转换。通常,在编程语言(通常分别称为INET_NTOA和INET_ATON )中提供了实现此目的的方法,但我在Java语言中找不到它。
有人知道它们叫什么或者如何实现它们吗?
发布于 2012-02-03 21:41:42
看看javadoc中的InetAddress。标准API不直接支持这些函数,但您可以使用此类提取这两种表示。下面是一个小示例:
InetAddress address = InetAddress.getLocalHost();
byte[] byteAddress = address.getAddress();
System.out.println(Arrays.toString(byteAddress));
System.out.println(address.getHostAddress());(请记住,字节是有符号的。)
如果你有长的-s,你可以使用ByteBuffer,快速和舒适的转换。方法: putLong(),然后数组()。
发布于 2012-02-03 21:35:35
java.net.InetAddress.getByAddress(byte[])
与INET_NTOA不完全相同,但非常相似。
带有长参数的示例:
String ntoa(long raw) {
byte[] b = new byte[] {(byte)(raw >> 24), (byte)(raw >> 16), (byte)(raw >> 8), (byte)raw};
try {
return InetAddress.getByAddress(b).getHostAddress();
} catch (UnknownHostException e) {
//No way here
return null;
}
}发布于 2012-02-10 21:15:22
下面是我为获取文本IPv4地址的数字表示而编写的代码:
public static Long ipAsNumeric(String ipAsString) {
String[] segments = ipAsString.split("\\.");
return (long) (Long.parseLong(segments[0]) * 16777216L
+ Long.parseLong(segments[1]) * 65536L
+ Long.parseLong(segments[2]) * 256L +
Long.parseLong(segments[3]));
}当然,这需要以有效的格式提供IPv4地址。
https://stackoverflow.com/questions/9129391
复制相似问题